初始化项目,复制原投票系统后台代码

This commit is contained in:
2024-12-05 14:21:48 +08:00
parent 92a1a77bc1
commit 22cb271ff1
130 changed files with 10106 additions and 4 deletions
+81
View File
@@ -0,0 +1,81 @@
package dto
import (
"fmt"
"vote-admin-video-api/api/model"
)
// ArticleDto 文章表
type ArticleDto struct {
ArticleId string `json:"article_id"` // 主键id
ArticleTitle string `json:"article_title"` // 文章标题
ArticleStatus int `json:"article_status"` // 文章状态(1:正常 2:禁用)
ArticleNumber string `json:"article_number"` // 文章编号
VoteNum uint `json:"vote_num"` // 总票数
ArticleContent string `json:"article_content"` // 文章内容
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间
ArticleAuthor []*ArticleAuthorDto `json:"article_author"` // 作者
Rank *int `json:"rank"` // 排名
}
// GetArticleListDto 列表-分页
func GetArticleListDto(m []*model.Article) []*ArticleDto {
// 处理返回值
responses := make([]*ArticleDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := &ArticleDto{
ArticleId: fmt.Sprintf("%d", v.ArticleId),
ArticleTitle: v.ArticleTitle,
ArticleStatus: v.ArticleStatus,
ArticleNumber: v.ArticleNumber,
VoteNum: v.VoteNum,
ArticleContent: v.ArticleContent,
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
}
// 加载数据-作者
if v.ArticleAuthor != nil {
response = response.LoadArticleAuthor(v.ArticleAuthor)
}
// 将转换后的结构体添加到新切片中
responses[i] = response
}
}
return responses
}
// GetArticleDto 详情
func GetArticleDto(m *model.Article) *ArticleDto {
return &ArticleDto{
ArticleId: fmt.Sprintf("%d", m.ArticleId),
ArticleTitle: m.ArticleTitle,
ArticleStatus: m.ArticleStatus,
ArticleNumber: m.ArticleNumber,
VoteNum: m.VoteNum,
ArticleContent: m.ArticleContent,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
}
// LoadArticleAuthor 加载数据-作者
func (r *ArticleDto) LoadArticleAuthor(m []*model.ArticleAuthor) *ArticleDto {
if len(m) > 0 {
r.ArticleAuthor = GetArticleAuthorListDto(m)
}
return r
}
// LoadRank 加载数据-排名
func (r *ArticleDto) LoadRank(m int) *ArticleDto {
if m > 0 {
r.Rank = &m
}
return r
}
+49
View File
@@ -0,0 +1,49 @@
package dto
import (
"fmt"
"vote-admin-video-api/api/model"
)
type ArticleAuthorDto struct {
AuthorId string `json:"author_id"` // 主键id
ArticleId string `json:"article_id"` // 文章id
AuthorName string `json:"author_name"` // 作者姓名
HospitalId string `json:"hospital_id"` // 作者所属id
HospitalName string `json:"hospital_name"` // 作者所属医院
}
// GetArticleAuthorListDto 列表-分页
func GetArticleAuthorListDto(m []*model.ArticleAuthor) []*ArticleAuthorDto {
// 处理返回值
responses := make([]*ArticleAuthorDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := &ArticleAuthorDto{
AuthorId: fmt.Sprintf("%d", v.AuthorId),
ArticleId: fmt.Sprintf("%d", v.ArticleId),
AuthorName: v.AuthorName,
HospitalId: fmt.Sprintf("%d", v.HospitalId),
}
// 加载数据-医院属性
if v.BaseHospital != nil {
response = response.LoadBaseHospital(v.BaseHospital)
}
// 将转换后的结构体添加到新切片中
responses[i] = response
}
}
return responses
}
// LoadBaseHospital 加载数据-医院
func (r *ArticleAuthorDto) LoadBaseHospital(m *model.BaseHospital) *ArticleAuthorDto {
if m != nil {
r.HospitalName = m.HospitalName
}
return r
}
+52
View File
@@ -0,0 +1,52 @@
package dto
import (
"fmt"
"vote-admin-video-api/api/model"
)
// BaseAgreementDto 基础-协议
type BaseAgreementDto struct {
AgreementId string `json:"agreement_id"` // 主键id
AgreementTitle string `json:"agreement_title"` // 协议名称
AgreementType int `json:"agreement_type"` // 协议类型(1:大赛介绍 2:投票规则)
AgreementContent string `json:"agreement_content"` // 协议内容
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间
}
// GetBaseAgreementDto 详情
func GetBaseAgreementDto(m *model.BaseAgreement) *BaseAgreementDto {
return &BaseAgreementDto{
AgreementId: fmt.Sprintf("%d", m.AgreementId),
AgreementTitle: m.AgreementTitle,
AgreementType: m.AgreementType,
AgreementContent: m.AgreementContent,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
}
// GetBaseAgreementListDto 列表-基础数据-协议
func GetBaseAgreementListDto(m []*model.BaseAgreement) []*BaseAgreementDto {
// 处理返回值
responses := make([]*BaseAgreementDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := &BaseAgreementDto{
AgreementId: fmt.Sprintf("%d", v.AgreementId),
AgreementTitle: v.AgreementTitle,
AgreementType: v.AgreementType,
AgreementContent: v.AgreementContent,
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
}
// 将转换后的结构体添加到新切片中
responses[i] = response
}
}
return responses
}
+85
View File
@@ -0,0 +1,85 @@
package dto
import (
"fmt"
"vote-admin-video-api/api/model"
)
type BaseHospitalDto struct {
HospitalID string `json:"hospital_id"` // 主键id
HospitalName string `json:"hospital_name"` // 医院名称
HospitalStatus int `json:"hospital_status"` // 状态(0:禁用 1:正常 2:删除)
HospitalLevelName string `json:"hospital_level_name"` // 医院等级名称
PostCode string `json:"post_code"` // 邮政编码
Telephone string `json:"telephone"` // 电话
ProvinceID int `json:"province_id"` // 省份id
Province string `json:"province"` // 省份
CityID int `json:"city_id"` // 城市id
City string `json:"city"` // 城市
CountyID int `json:"county_id"` // 区县id
County string `json:"county"` // 区县
Address string `json:"address"` // 地址
Latitude string `json:"latitude"` // 纬度
Longitude string `json:"longitude"` // 经度
Description string `json:"description"` // 简介
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间
}
func GetBaseHospitalDto(m *model.BaseHospital) *BaseHospitalDto {
return &BaseHospitalDto{
HospitalID: fmt.Sprintf("%d", m.HospitalId),
HospitalName: m.HospitalName,
HospitalStatus: m.HospitalStatus,
HospitalLevelName: m.HospitalLevelName,
PostCode: m.PostCode,
Telephone: m.HospitalName,
ProvinceID: m.ProvinceId,
Province: m.Province,
CityID: m.CityId,
City: m.City,
CountyID: m.CountyId,
County: m.County,
Address: m.Address,
Latitude: m.Lat,
Longitude: m.HospitalName,
Description: m.Desc,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
}
func GetBaseHospitalListDto(m []*model.BaseHospital) []BaseHospitalDto {
// 处理返回值
responses := make([]BaseHospitalDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := BaseHospitalDto{
HospitalID: fmt.Sprintf("%d", v.HospitalId),
HospitalName: v.HospitalName,
HospitalStatus: v.HospitalStatus,
HospitalLevelName: v.HospitalLevelName,
PostCode: v.PostCode,
Telephone: v.HospitalName,
ProvinceID: v.ProvinceId,
Province: v.Province,
CityID: v.CityId,
City: v.City,
CountyID: v.CountyId,
County: v.County,
Address: v.Address,
Latitude: v.Lat,
Longitude: v.HospitalName,
Description: v.Desc,
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
}
// 将转换后的结构体添加到新切片中
responses[i] = response
}
}
return responses
}
+18
View File
@@ -0,0 +1,18 @@
package dto
import (
"vote-admin-video-api/api/model"
)
type DataDto struct {
ViewNum uint `json:"view_num"` // 浏览数量
VoteNum uint `json:"vote_num"` // 投票数量
}
// GetDataDto 详情
func GetDataDto(m *model.Data) *DataDto {
return &DataDto{
ViewNum: m.ViewNum,
VoteNum: m.VoteNum,
}
}
+42
View File
@@ -0,0 +1,42 @@
package dto
import (
"fmt"
"vote-admin-video-api/api/model"
"vote-admin-video-api/utils"
)
// LoginDto 登陆
type LoginDto struct {
UserId string `json:"user_id"` // 用户id
NickName string `json:"nick_name"` // 用户名称
Avatar string `json:"avatar"` // 头像
Token string `json:"token"` // token
}
// IndexDto 首页
type IndexDto struct {
ViewNum uint `json:"view_num"` // 浏览数量
VoteNum uint `json:"vote_num"` // 投票数量
}
// IndexDataDto 首页动态统计数据
type IndexDataDto struct {
Date string `json:"date"` // 日期
Count int64 `json:"count"` // 数量
}
// AdminLoginDto 微信登陆
func AdminLoginDto(m *model.AdminUser) *LoginDto {
return &LoginDto{
UserId: fmt.Sprintf("%d", m.UserId),
NickName: m.NickName,
Avatar: utils.AddOssDomain(m.Avatar),
}
}
// LoadToken 加载token
func (r *LoginDto) LoadToken(token string) *LoginDto {
r.Token = token
return r
}
+26
View File
@@ -0,0 +1,26 @@
package dto
import (
"fmt"
"vote-admin-video-api/api/model"
)
// SystemTimeDto 配置-时间
type SystemTimeDto struct {
SystemTimeId string `json:"system_time_id"` // 主键id
StartTime *model.LocalTime `json:"start_time"` // 开始投票时间
EndTime *model.LocalTime `json:"end_time"` // 结束投票时间
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 修改时间
}
// GetSystemTimeDto 详情
func GetSystemTimeDto(m *model.SystemTime) *SystemTimeDto {
return &SystemTimeDto{
SystemTimeId: fmt.Sprintf("%d", m.SystemTimeId),
StartTime: m.StartTime,
EndTime: m.EndTime,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
}
+67
View File
@@ -0,0 +1,67 @@
package dto
import (
"fmt"
"vote-admin-video-api/api/model"
)
// UserDto 用户表
type UserDto struct {
UserId string `json:"user_id"` // 用户id
UserStatus int `json:"user_status"` // 状态(1:正常 2:禁用)
OpenId string `json:"open_id"` // 用户微信标识
AppIden string `json:"app_iden"` // app唯一标识
LoginAt *model.LocalTime `json:"login_at"` // 登陆时间
LoginIp string `json:"login_ip"` // 登陆ip
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间
}
// UserVoteDto 用户投票记录
type UserVoteDto struct {
Id string `json:"id"` // 图文/视频标识
AppIden string `json:"app_iden"` // app唯一标识
OpenId string `json:"open_id"` // open_id
Title string `json:"title"` // 标题
VotedAt string `json:"voted_at"` // 投票时间
}
// GetUserListDto 列表
func GetUserListDto(m []*model.User) []*UserDto {
// 处理返回值
responses := make([]*UserDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := &UserDto{
UserId: fmt.Sprintf("%d", v.UserId),
UserStatus: v.UserStatus,
OpenId: v.OpenId,
AppIden: v.AppIden,
LoginAt: v.LoginAt,
LoginIp: v.LoginIp,
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
}
// 将转换后的结构体添加到新切片中
responses[i] = response
}
}
return responses
}
// GetUserDto 详情-问题
func GetUserDto(m *model.User) *UserDto {
return &UserDto{
UserId: fmt.Sprintf("%d", m.UserId),
UserStatus: m.UserStatus,
OpenId: m.OpenId,
AppIden: m.AppIden,
LoginAt: m.LoginAt,
LoginIp: m.LoginIp,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
}
+84
View File
@@ -0,0 +1,84 @@
package dto
import (
"fmt"
"vote-admin-video-api/api/model"
)
// VideoDto 视频表
type VideoDto struct {
VideoId string `json:"video_id"` // 主键id
VideoTitle string `json:"video_title"` // 视频标题
VideoStatus int `json:"video_status"` // 视频状态(1:正常 2:禁用)
VideoNumber string `json:"video_number"` // 视频编号
VideoNo string `json:"video_no"` // 视频编号
VoteNum uint `json:"vote_num"` // 总票数
VideoContent string `json:"video_content"` // 视频内容
CreatedAt model.LocalTime `json:"created_at"` // 创建时间
UpdatedAt model.LocalTime `json:"updated_at"` // 更新时间
VideoAuthor []*VideoAuthorDto `json:"video_author"` // 作者
Rank *int `json:"rank"` // 排名
}
// GetVideoListDto 列表-分页
func GetVideoListDto(m []*model.Video) []*VideoDto {
// 处理返回值
responses := make([]*VideoDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := &VideoDto{
VideoId: fmt.Sprintf("%d", v.VideoId),
VideoTitle: v.VideoTitle,
VideoStatus: v.VideoStatus,
VideoNumber: v.VideoNumber,
VideoNo: v.VideoNo,
VoteNum: v.VoteNum,
VideoContent: v.VideoContent,
CreatedAt: v.CreatedAt,
UpdatedAt: v.UpdatedAt,
}
// 加载数据-作者
if v.VideoAuthor != nil {
response = response.LoadVideoAuthor(v.VideoAuthor)
}
// 将转换后的结构体添加到新切片中
responses[i] = response
}
}
return responses
}
// GetVideoDto 详情
func GetVideoDto(m *model.Video) *VideoDto {
return &VideoDto{
VideoId: fmt.Sprintf("%d", m.VideoId),
VideoTitle: m.VideoTitle,
VideoStatus: m.VideoStatus,
VideoNumber: m.VideoNumber,
VideoNo: m.VideoNo,
VoteNum: m.VoteNum,
VideoContent: m.VideoContent,
CreatedAt: m.CreatedAt,
UpdatedAt: m.UpdatedAt,
}
}
// LoadVideoAuthor 加载数据-作者
func (r *VideoDto) LoadVideoAuthor(m []*model.VideoAuthor) *VideoDto {
if len(m) > 0 {
r.VideoAuthor = GetVideoAuthorListDto(m)
}
return r
}
// LoadRank 加载数据-排名
func (r *VideoDto) LoadRank(m int) *VideoDto {
if m > 0 {
r.Rank = &m
}
return r
}
+49
View File
@@ -0,0 +1,49 @@
package dto
import (
"fmt"
"vote-admin-video-api/api/model"
)
type VideoAuthorDto struct {
AuthorId string `json:"author_id"` // 主键id
VideoId string `json:"video_id"` // 文章id
HospitalId string `json:"hospital_id"` // 作者所属id
HospitalName string `json:"hospital_name"` // 作者所属医院
AuthorName string `json:"author_name"` // 作者姓名
}
// GetVideoAuthorListDto 列表-分页
func GetVideoAuthorListDto(m []*model.VideoAuthor) []*VideoAuthorDto {
// 处理返回值
responses := make([]*VideoAuthorDto, len(m))
if len(m) > 0 {
for i, v := range m {
response := &VideoAuthorDto{
AuthorId: fmt.Sprintf("%d", v.AuthorId),
VideoId: fmt.Sprintf("%d", v.VideoId),
AuthorName: v.AuthorName,
HospitalId: fmt.Sprintf("%d", v.HospitalId),
}
// 加载数据-医院属性
if v.BaseHospital != nil {
response = response.LoadBaseHospitalAttr(v.BaseHospital)
}
// 将转换后的结构体添加到新切片中
responses[i] = response
}
}
return responses
}
// LoadBaseHospitalAttr 加载数据-医院属性
func (r *VideoAuthorDto) LoadBaseHospitalAttr(m *model.BaseHospital) *VideoAuthorDto {
if m != nil {
r.HospitalName = m.HospitalName
}
return r
}