add router for get inner donation page
This commit is contained in:
parent
d87808531e
commit
d22601be85
@ -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": {
|
||||||
|
@ -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": {
|
||||||
|
@ -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:
|
||||||
|
@ -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"`
|
||||||
|
@ -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 (
|
||||||
|
@ -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 = `
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user