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",
"properties": {
"avatar": {
"type": "string"
"$ref": "#/definitions/donat-widget_internal_model.InnerFile"
},
"background_img": {
"type": "string"
"$ref": "#/definitions/donat-widget_internal_model.InnerFile"
},
"description": {
"type": "string"
},
"head_img": {
"type": "string"
"$ref": "#/definitions/donat-widget_internal_model.InnerFile"
},
"text_after_donat": {
"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": {
"type": "object",
"properties": {

View File

@ -975,22 +975,42 @@
"type": "object",
"properties": {
"avatar": {
"type": "string"
"$ref": "#/definitions/donat-widget_internal_model.InnerFile"
},
"background_img": {
"type": "string"
"$ref": "#/definitions/donat-widget_internal_model.InnerFile"
},
"description": {
"type": "string"
},
"head_img": {
"type": "string"
"$ref": "#/definitions/donat-widget_internal_model.InnerFile"
},
"text_after_donat": {
"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": {
"type": "object",
"properties": {

View File

@ -137,16 +137,29 @@ definitions:
donat-widget_internal_model.InnerDonatePageResponse:
properties:
avatar:
type: string
$ref: '#/definitions/donat-widget_internal_model.InnerFile'
background_img:
type: string
$ref: '#/definitions/donat-widget_internal_model.InnerFile'
description:
type: string
head_img:
type: string
$ref: '#/definitions/donat-widget_internal_model.InnerFile'
text_after_donat:
type: string
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:
properties:
duration:

View File

@ -88,14 +88,49 @@ type Target struct {
}
type DonatePage struct {
ID int `db:"id"`
StreamerID int `db:"streamer_id"`
Description string `db:"description"`
TextAfterDonat string `db:"text_after_donat"`
HeadImg string `db:"head_img"`
Avatar string `db:"avatar"`
BackgroundImg string `db:"background_img"`
StreamerLogin string `db:"streamer_login"`
// Основные поля
ID int `db:"id" json:"id" example:"1" format:"int64" description:"Уникальный идентификатор страницы доната"`
StreamerID int `db:"streamer_id" json:"streamer_id" example:"1001" format:"int64" description:"ID стримера"`
Description string `db:"description" json:"description" example:"Поддержи этого стримера" description:"Описание страницы доната"`
TextAfterDonat string `db:"text_after_donat" json:"text_after_donat" example:"Спасибо за вашу поддержку!" description:"Текст, который отображается после доната"`
StreamerLogin string `db:"streamer_login" json:"streamer_login" example:"streamer123" description:"Логин/псевдоним стримера"`
// Поля для хед-изображения
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 {
@ -105,14 +140,6 @@ type Moderation struct {
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 {
Login string `json:"login"`
OnLine string `json:"online"`

View File

@ -27,7 +27,8 @@ CREATE TABLE IF NOT EXISTS files (
extension VARCHAR(10) NOT NULL,
streamer_id INTEGER NOT NULL,
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 (

View File

@ -84,7 +84,36 @@ WHERE id = (@target_id);
`
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 = `

View File

@ -162,18 +162,45 @@ func (donatService *ServiceDonat) GetInnerDonatPage(
ctx context.Context,
streamerID model.StreamerID,
) (model.InnerDonatePageResponse, error) {
// Получаем данные страницы доната из репозитория
donatePage, err := donatService.donatRepo.GetDonatPage(ctx, streamerID)
if err != nil {
slog.Error(err.Error())
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,
TextAfterDonat: donatePage.TextAfterDonat,
HeadImg: donatePage.HeadImg,
Avatar: donatePage.Avatar,
BackgroundImg: donatePage.BackgroundImg,
HeadImg: headImgFile,
Avatar: avatarFile,
BackgroundImg: backgroundImgFile,
}
return innerDonatePageResponse, nil
@ -193,9 +220,9 @@ func (donatService *ServiceDonat) GetOuterDonatPage(
Description: donatePage.Description,
Login: donatePage.StreamerLogin,
OnLine: "online",
BackgroundImg: donatePage.BackgroundImg,
HeadImg: donatePage.HeadImg,
AvatarImg: donatePage.Avatar,
BackgroundImg: donatService.storage.DownloadLink(donatePage.BackgroundImgFileId),
HeadImg: donatService.storage.DownloadLink(donatePage.HeadImgFileId),
AvatarImg: donatService.storage.DownloadLink(donatePage.AvatarFileId),
}
return outerDonatePageResponse, nil
}