add router for get inner donation page

This commit is contained in:
harold 2025-03-08 22:11:55 +05:00
parent d87808531e
commit d22601be85
7 changed files with 171 additions and 34 deletions

View File

@ -982,22 +982,42 @@ const docTemplate = `{
"type": "object", "type": "object",
"properties": { "properties": {
"avatar": { "avatar": {
"type": "string" "$ref": "#/definitions/donat-widget_internal_model.InnerFile"
}, },
"background_img": { "background_img": {
"type": "string" "$ref": "#/definitions/donat-widget_internal_model.InnerFile"
}, },
"description": { "description": {
"type": "string" "type": "string"
}, },
"head_img": { "head_img": {
"type": "string" "$ref": "#/definitions/donat-widget_internal_model.InnerFile"
}, },
"text_after_donat": { "text_after_donat": {
"type": "string" "type": "string"
} }
} }
}, },
"donat-widget_internal_model.InnerFile": {
"type": "object",
"properties": {
"file_id": {
"type": "string"
},
"file_link": {
"type": "string"
},
"file_name": {
"type": "string"
},
"file_size": {
"type": "integer"
},
"file_type": {
"type": "string"
}
}
},
"donat-widget_internal_model.ModerationResponse": { "donat-widget_internal_model.ModerationResponse": {
"type": "object", "type": "object",
"properties": { "properties": {

View File

@ -975,22 +975,42 @@
"type": "object", "type": "object",
"properties": { "properties": {
"avatar": { "avatar": {
"type": "string" "$ref": "#/definitions/donat-widget_internal_model.InnerFile"
}, },
"background_img": { "background_img": {
"type": "string" "$ref": "#/definitions/donat-widget_internal_model.InnerFile"
}, },
"description": { "description": {
"type": "string" "type": "string"
}, },
"head_img": { "head_img": {
"type": "string" "$ref": "#/definitions/donat-widget_internal_model.InnerFile"
}, },
"text_after_donat": { "text_after_donat": {
"type": "string" "type": "string"
} }
} }
}, },
"donat-widget_internal_model.InnerFile": {
"type": "object",
"properties": {
"file_id": {
"type": "string"
},
"file_link": {
"type": "string"
},
"file_name": {
"type": "string"
},
"file_size": {
"type": "integer"
},
"file_type": {
"type": "string"
}
}
},
"donat-widget_internal_model.ModerationResponse": { "donat-widget_internal_model.ModerationResponse": {
"type": "object", "type": "object",
"properties": { "properties": {

View File

@ -137,16 +137,29 @@ definitions:
donat-widget_internal_model.InnerDonatePageResponse: donat-widget_internal_model.InnerDonatePageResponse:
properties: properties:
avatar: avatar:
type: string $ref: '#/definitions/donat-widget_internal_model.InnerFile'
background_img: background_img:
type: string $ref: '#/definitions/donat-widget_internal_model.InnerFile'
description: description:
type: string type: string
head_img: head_img:
type: string $ref: '#/definitions/donat-widget_internal_model.InnerFile'
text_after_donat: text_after_donat:
type: string type: string
type: object type: object
donat-widget_internal_model.InnerFile:
properties:
file_id:
type: string
file_link:
type: string
file_name:
type: string
file_size:
type: integer
file_type:
type: string
type: object
donat-widget_internal_model.ModerationResponse: donat-widget_internal_model.ModerationResponse:
properties: properties:
duration: duration:

View File

@ -88,14 +88,49 @@ type Target struct {
} }
type DonatePage struct { type DonatePage struct {
ID int `db:"id"` // Основные поля
StreamerID int `db:"streamer_id"` ID int `db:"id" json:"id" example:"1" format:"int64" description:"Уникальный идентификатор страницы доната"`
Description string `db:"description"` StreamerID int `db:"streamer_id" json:"streamer_id" example:"1001" format:"int64" description:"ID стримера"`
TextAfterDonat string `db:"text_after_donat"` Description string `db:"description" json:"description" example:"Поддержи этого стримера" description:"Описание страницы доната"`
HeadImg string `db:"head_img"` TextAfterDonat string `db:"text_after_donat" json:"text_after_donat" example:"Спасибо за вашу поддержку!" description:"Текст, который отображается после доната"`
Avatar string `db:"avatar"` StreamerLogin string `db:"streamer_login" json:"streamer_login" example:"streamer123" description:"Логин/псевдоним стримера"`
BackgroundImg string `db:"background_img"`
StreamerLogin string `db:"streamer_login"` // Поля для хед-изображения
HeadImgFileId uuid.UUID `db:"head_img_id" json:"head_img_id" format:"uuid" example:"550e8400-e29b-41d4-a716-446655440000" description:"UUID файла хед-изображения"`
HeadImgFileName string `db:"head_img_file_name" json:"head_img_file_name" example:"header.png" description:"Имя файла хед-изображения"`
HeadImgType string `db:"head_img_type" json:"head_img_type" example:"image/png" description:"Тип файла хед-изображения"`
HeadImgLink string `json:"head_img_link" example:"https://cdn.example.com/images/550e8400-e29b-41d4-a716-446655440000" description:"Публичный URL хед-изображения"`
HeadImgSize int `db:"head_img_size" json:"head_img_size" example:"1024" description:"Размер файла хед-изображения в байтах"`
// Поля для аватара
AvatarFileId uuid.UUID `db:"avatar_id" json:"avatar_id" format:"uuid" example:"550e8400-e29b-41d4-a716-446655440001" description:"UUID файла аватара"`
AvatarFileName string `db:"avatar_file_name" json:"avatar_file_name" example:"avatar.png" description:"Имя файла аватара"`
AvatarType string `db:"avatar_type" json:"avatar_type" example:"image/png" description:"Тип файла аватара"`
AvatarLink string `json:"avatar_link" example:"https://cdn.example.com/images/550e8400-e29b-41d4-a716-446655440001" description:"Публичный URL аватара"`
AvatarImgSize int `db:"avatar_img_size" json:"avatar_img_size" example:"512" description:"Размер файла аватара в байтах"`
// Поля для фона
BackgroundImgFileId uuid.UUID `db:"background_img_id" json:"background_img_id" format:"uuid" example:"550e8400-e29b-41d4-a716-446655440002" description:"UUID файла фона"`
BackgroundImgFileName string `db:"background_img_file_name" json:"background_img_file_name" example:"background.png" description:"Имя файла фона"`
BackgroundImgType string `db:"background_img_type" json:"background_img_type" example:"image/png" description:"Тип файла фона"`
BackgroundImgLink string `json:"background_img_link" example:"https://cdn.example.com/images/550e8400-e29b-41d4-a716-446655440002" description:"Публичный URL фона"`
BackgroundImgSize int `db:"background_img_size" json:"background_img_size" example:"2048" description:"Размер файла фона в байтах"`
}
type InnerFile struct {
FileID uuid.UUID `json:"file_id"`
FileName string `json:"file_name"`
FileType string `json:"file_type"`
FileLink string `json:"file_link"`
FileSize int `json:"file_size"`
}
type InnerDonatePageResponse struct {
Description string `json:"description"`
TextAfterDonat string `json:"text_after_donat"`
HeadImg InnerFile `json:"head_img"`
Avatar InnerFile `json:"avatar"`
BackgroundImg InnerFile `json:"background_img"`
} }
type Moderation struct { type Moderation struct {
@ -105,14 +140,6 @@ type Moderation struct {
Duration int `db:"duration"` Duration int `db:"duration"`
} }
type InnerDonatePageResponse struct {
Description string `json:"description"`
TextAfterDonat string `json:"text_after_donat"`
HeadImg string `json:"head_img"`
Avatar string `json:"avatar"`
BackgroundImg string `json:"background_img"`
}
type OuterDonatePageResponse struct { type OuterDonatePageResponse struct {
Login string `json:"login"` Login string `json:"login"`
OnLine string `json:"online"` OnLine string `json:"online"`

View File

@ -27,7 +27,8 @@ CREATE TABLE IF NOT EXISTS files (
extension VARCHAR(10) NOT NULL, extension VARCHAR(10) NOT NULL,
streamer_id INTEGER NOT NULL, streamer_id INTEGER NOT NULL,
entity VARCHAR(50) NOT NULL DEFAULT 'widget', entity VARCHAR(50) NOT NULL DEFAULT 'widget',
created_at TIMESTAMP DEFAULT now() created_at TIMESTAMP DEFAULT now(),
size FLOAT NOT NULL DEFAULT 0,
) )
CREATE TABLE IF NOT EXISTS donats ( CREATE TABLE IF NOT EXISTS donats (

View File

@ -84,7 +84,36 @@ WHERE id = (@target_id);
` `
var GetDonationPage = ` var GetDonationPage = `
SELECT * FROM donate_pages WHERE streamer_id = (@streamer_id); SELECT
dp.id,
dp.streamer_id,
dp.description,
dp.text_after_donat,
dp.streamer_login,
-- Поля для хед-изображения
head_img.id AS head_img_id,
head_img.file_name AS head_img_file_name,
head_img.file_type AS head_img_type,
head_img.size AS head_img_size,
-- Поля для аватара
avatar.id AS avatar_id,
avatar.file_name AS avatar_file_name,
avatar.file_type AS avatar_type,
avatar.size AS avatar_img_size,
-- Поля для фона
background_img.id AS background_img_id,
background_img.file_name AS background_img_file_name,
background_img.file_type AS background_img_type,
background_img.size AS background_img_size
FROM donate_pages dp
LEFT JOIN files head_img ON dp.head_img = head_img.id
LEFT JOIN files avatar ON dp.avatar = avatar.id
LEFT JOIN files background_img ON dp.background_img = background_img.id
WHERE dp.streamer_id = (@streamer_id);
` `
var GetDonationPageByLogin = ` var GetDonationPageByLogin = `

View File

@ -162,18 +162,45 @@ func (donatService *ServiceDonat) GetInnerDonatPage(
ctx context.Context, ctx context.Context,
streamerID model.StreamerID, streamerID model.StreamerID,
) (model.InnerDonatePageResponse, error) { ) (model.InnerDonatePageResponse, error) {
// Получаем данные страницы доната из репозитория
donatePage, err := donatService.donatRepo.GetDonatPage(ctx, streamerID) donatePage, err := donatService.donatRepo.GetDonatPage(ctx, streamerID)
if err != nil { if err != nil {
slog.Error(err.Error()) slog.Error(err.Error())
return model.InnerDonatePageResponse{}, err return model.InnerDonatePageResponse{}, err
} }
var innerDonatePageResponse = model.InnerDonatePageResponse{ // Создаем объекты InnerFile для каждого изображения
headImgFile := model.InnerFile{
FileID: donatePage.HeadImgFileId,
FileName: donatePage.HeadImgFileName,
FileType: donatePage.HeadImgType,
FileLink: donatService.storage.DownloadLink(donatePage.HeadImgFileId),
FileSize: donatePage.HeadImgSize,
}
avatarFile := model.InnerFile{
FileID: donatePage.AvatarFileId,
FileName: donatePage.AvatarFileName,
FileType: donatePage.AvatarType,
FileLink: donatService.storage.DownloadLink(donatePage.AvatarFileId),
FileSize: donatePage.AvatarImgSize,
}
backgroundImgFile := model.InnerFile{
FileID: donatePage.BackgroundImgFileId,
FileName: donatePage.BackgroundImgFileName,
FileType: donatePage.BackgroundImgType,
FileLink: donatService.storage.DownloadLink(donatePage.BackgroundImgFileId),
FileSize: donatePage.BackgroundImgSize,
}
// Создаем объект InnerDonatePageResponse
innerDonatePageResponse := model.InnerDonatePageResponse{
Description: donatePage.Description, Description: donatePage.Description,
TextAfterDonat: donatePage.TextAfterDonat, TextAfterDonat: donatePage.TextAfterDonat,
HeadImg: donatePage.HeadImg, HeadImg: headImgFile,
Avatar: donatePage.Avatar, Avatar: avatarFile,
BackgroundImg: donatePage.BackgroundImg, BackgroundImg: backgroundImgFile,
} }
return innerDonatePageResponse, nil return innerDonatePageResponse, nil
@ -193,9 +220,9 @@ func (donatService *ServiceDonat) GetOuterDonatPage(
Description: donatePage.Description, Description: donatePage.Description,
Login: donatePage.StreamerLogin, Login: donatePage.StreamerLogin,
OnLine: "online", OnLine: "online",
BackgroundImg: donatePage.BackgroundImg, BackgroundImg: donatService.storage.DownloadLink(donatePage.BackgroundImgFileId),
HeadImg: donatePage.HeadImg, HeadImg: donatService.storage.DownloadLink(donatePage.HeadImgFileId),
AvatarImg: donatePage.Avatar, AvatarImg: donatService.storage.DownloadLink(donatePage.AvatarFileId),
} }
return outerDonatePageResponse, nil return outerDonatePageResponse, nil
} }