To gitea and beyond, let's go(-yco)
This commit is contained in:
69
internal/dto/post.go
Normal file
69
internal/dto/post.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package dto
|
||||
|
||||
import (
|
||||
"time"
|
||||
|
||||
"goyco/internal/database"
|
||||
)
|
||||
|
||||
type PostDTO struct {
|
||||
ID uint `json:"id"`
|
||||
Title string `json:"title"`
|
||||
URL string `json:"url"`
|
||||
Content string `json:"content,omitempty"`
|
||||
AuthorID *uint `json:"author_id,omitempty"`
|
||||
AuthorName string `json:"author_name,omitempty"`
|
||||
Author *UserDTO `json:"author,omitempty"`
|
||||
UpVotes int `json:"up_votes"`
|
||||
DownVotes int `json:"down_votes"`
|
||||
Score int `json:"score"`
|
||||
CurrentVote string `json:"current_vote,omitempty"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
type PostListDTO struct {
|
||||
Posts []PostDTO `json:"posts"`
|
||||
Count int `json:"count"`
|
||||
Limit int `json:"limit"`
|
||||
Offset int `json:"offset"`
|
||||
}
|
||||
|
||||
func ToPostDTO(post *database.Post) PostDTO {
|
||||
if post == nil {
|
||||
return PostDTO{}
|
||||
}
|
||||
|
||||
dto := PostDTO{
|
||||
ID: post.ID,
|
||||
Title: post.Title,
|
||||
URL: post.URL,
|
||||
Content: post.Content,
|
||||
AuthorID: post.AuthorID,
|
||||
AuthorName: post.AuthorName,
|
||||
UpVotes: post.UpVotes,
|
||||
DownVotes: post.DownVotes,
|
||||
Score: post.Score,
|
||||
CreatedAt: post.CreatedAt,
|
||||
UpdatedAt: post.UpdatedAt,
|
||||
}
|
||||
|
||||
if post.CurrentVote != "" {
|
||||
dto.CurrentVote = string(post.CurrentVote)
|
||||
}
|
||||
|
||||
if post.Author.ID != 0 {
|
||||
authorDTO := ToUserDTO(&post.Author)
|
||||
dto.Author = &authorDTO
|
||||
}
|
||||
|
||||
return dto
|
||||
}
|
||||
|
||||
func ToPostDTOs(posts []database.Post) []PostDTO {
|
||||
dtos := make([]PostDTO, len(posts))
|
||||
for i := range posts {
|
||||
dtos[i] = ToPostDTO(&posts[i])
|
||||
}
|
||||
return dtos
|
||||
}
|
||||
Reference in New Issue
Block a user