diff --git a/dal/db_query/queries.sql b/dal/db_query/queries.sql index 067d65b..d8e548e 100644 --- a/dal/db_query/queries.sql +++ b/dal/db_query/queries.sql @@ -1095,3 +1095,11 @@ ORDER BY (q.session != '') ASC, --без сессии первые потом с -- name: GetQuestionsAICount :one SELECT COUNT(*) AS count FROM question WHERE quiz_id = $1 AND (session = $2 OR session = '') AND deleted = FALSE; +-- name: CreateQuizAudience :one +INSERT INTO gigachatAudience (QuizID, Sex, Age) VALUES ($1, $2, $3) RETURNING ID; + +-- name: GetQuizAudience :many +SELECT * FROM gigachatAudience WHERE QuizID = $1 AND Deleted = FALSE; + +-- name: DeleteQuizAudience :exec +UPDATE gigachatAudience set Deleted = TRUE WHERE QuizID = $1; diff --git a/dal/schema/000018_init.down.sql b/dal/schema/000018_init.down.sql new file mode 100644 index 0000000..b771edc --- /dev/null +++ b/dal/schema/000018_init.down.sql @@ -0,0 +1 @@ +DROP TABLE IF EXISTS gigachatAudience; \ No newline at end of file diff --git a/dal/schema/000018_init.up.sql b/dal/schema/000018_init.up.sql new file mode 100644 index 0000000..57e39f9 --- /dev/null +++ b/dal/schema/000018_init.up.sql @@ -0,0 +1,9 @@ +CREATE TABLE IF NOT EXISTS gigachatAudience ( + ID BIGSERIAL UNIQUE NOT NULL PRIMARY KEY, + QuizID BIGINT NOT NULL, + Sex BOOLEAN NOT NULL, + Age VARCHAR(5) NOT NULL, + Deleted BOOLEAN NOT NULL DEFAULT FALSE, + CreatedAt TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + CONSTRAINT fk_quiz FOREIGN KEY (QuizID) REFERENCES quiz(ID) +); \ No newline at end of file diff --git a/model/gigachat.go b/model/gigachat.go new file mode 100644 index 0000000..adf26d8 --- /dev/null +++ b/model/gigachat.go @@ -0,0 +1,49 @@ +package model + +import ( + "errors" +) + +type GigaChatMessage struct { + Role string `json:"role"` + Content string `json:"content"` +} + +type GigaChatRequest struct { + Model string `json:"model"` + Stream bool `json:"stream"` + UpdateInterval int `json:"update_interval"` + Messages []GigaChatMessage `json:"messages"` +} + +type GigaChatResponse struct { + Choices []struct { + Message struct { + Role string `json:"role"` + Content string `json:"content"` + } `json:"message"` + } `json:"choices"` +} + +const CreatePrompt = `Ты маркетолог и копирайтер. Твоя задача — переформулировать маркетинговый вопрос так, чтобы он лучше подходил определённой целевой аудитории по полу и возрасту. +Ответ должен строго состоять из двух строк: + +{ + "title": "<переформулированный заголовок>", + "description": "<переформулированное описание>" +} + +Я напишу возраст, пол, заголовок и описание вопроса, а ты вернёшь только отформатированный результат.` + +var ReworkQuestionPrompt string = "%s %s пол.\n%s\n%s" + +var EmptyResponseErrorGigaChat = errors.New("empty response from GigaChat try again") + +type GigaChatAudience struct { + ID int64 `json:"id"` + QuizID int32 `json:"quiz_id"` + Sex bool `json:"sex"` // false - female, true - male + Age string `json:"age"` + Deleted bool `json:"deleted"` + CreatedAt int64 `json:"created_at"` +} diff --git a/sqlc.yaml b/sqlc.yaml index 031ec0e..c92df77 100644 --- a/sqlc.yaml +++ b/sqlc.yaml @@ -36,6 +36,8 @@ packages: - "./dal/schema/000016_init.down.sql" - "./dal/schema/000017_init.up.sql" - "./dal/schema/000017_init.down.sql" + - "./dal/schema/000018_init.up.sql" + - "./dal/schema/000018_init.down.sql" engine: "postgresql" emit_json_tags: true emit_db_tags: true