This commit is contained in:
2026-03-23 18:55:27 +07:00
parent 6dc0322fe5
commit 3626c12319
47 changed files with 2741 additions and 0 deletions

54
pkg/models/role.go Normal file
View File

@@ -0,0 +1,54 @@
package models
import (
"history-api/pkg/dtos/response"
"history-api/pkg/convert"
"github.com/jackc/pgx/v5/pgtype"
)
type RoleSimple struct {
ID pgtype.UUID `json:"id"`
Name string `json:"name"`
}
func (r *RoleSimple) ToResponse() *response.RoleSimpleResponse {
return &response.RoleSimpleResponse{
ID: convert.UUIDToString(r.ID),
Name: r.Name,
}
}
func RolesToResponse(rs []*RoleSimple) []*response.RoleSimpleResponse {
out := make([]*response.RoleSimpleResponse, len(rs))
for i := range rs {
out[i] = rs[i].ToResponse()
}
return out
}
type RoleEntity struct {
ID pgtype.UUID `json:"id"`
Name string `json:"name"`
IsDeleted pgtype.Bool `json:"is_deleted"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
}
func (r *RoleEntity) ToResponse() *response.RoleResponse {
return &response.RoleResponse{
ID: convert.UUIDToString(r.ID),
Name: r.Name,
IsDeleted: convert.BoolVal(r.IsDeleted),
CreatedAt: convert.TimeToPtr(r.CreatedAt),
UpdatedAt: convert.TimeToPtr(r.UpdatedAt),
}
}
func RolesEntityToResponse(rs []*RoleEntity) []*response.RoleResponse {
out := make([]*response.RoleResponse, len(rs))
for i := range rs {
out[i] = rs[i].ToResponse()
}
return out
}

35
pkg/models/token.go Normal file
View File

@@ -0,0 +1,35 @@
package models
import (
"history-api/pkg/convert"
"history-api/pkg/dtos/response"
"github.com/jackc/pgx/v5/pgtype"
)
type TokenEntity struct {
ID pgtype.UUID `json:"id"`
UserID pgtype.UUID `json:"user_id"`
Token string `json:"token"`
TokenType int16 `json:"token_type"`
ExpiresAt pgtype.Timestamptz `json:"expires_at"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
}
func (t *TokenEntity) ToResponse() *response.TokenResponse {
return &response.TokenResponse{
ID: convert.UUIDToString(t.ID),
UserID: convert.UUIDToString(t.UserID),
TokenType: t.TokenType,
ExpiresAt: convert.TimeToPtr(t.ExpiresAt),
CreatedAt: convert.TimeToPtr(t.CreatedAt),
}
}
func TokensEntityToResponse(ts []*TokenEntity) []*response.TokenResponse {
out := make([]*response.TokenResponse, len(ts))
for i := range ts {
out[i] = ts[i].ToResponse()
}
return out
}

58
pkg/models/user.go Normal file
View File

@@ -0,0 +1,58 @@
package models
import (
"encoding/json"
"history-api/pkg/convert"
"history-api/pkg/dtos/response"
"github.com/jackc/pgx/v5/pgtype"
)
type UserEntity struct {
ID pgtype.UUID `json:"id"`
Name string `json:"name"`
Email string `json:"email"`
PasswordHash string `json:"password_hash"`
AvatarUrl pgtype.Text `json:"avatar_url"`
IsActive pgtype.Bool `json:"is_active"`
IsVerified pgtype.Bool `json:"is_verified"`
TokenVersion int32 `json:"token_version"`
RefreshToken pgtype.Text `json:"refresh_token"`
IsDeleted pgtype.Bool `json:"is_deleted"`
CreatedAt pgtype.Timestamptz `json:"created_at"`
UpdatedAt pgtype.Timestamptz `json:"updated_at"`
Roles []*RoleSimple `json:"roles"`
}
func (u *UserEntity) ParseRoles(data []byte) error {
if len(data) == 0 {
u.Roles = []*RoleSimple{}
return nil
}
return json.Unmarshal(data, &u.Roles)
}
func (u *UserEntity) ToResponse() *response.UserResponse {
return &response.UserResponse{
ID: convert.UUIDToString(u.ID),
Name: u.Name,
Email: u.Email,
AvatarUrl: convert.TextToString(u.AvatarUrl),
IsActive: convert.BoolVal(u.IsActive),
IsVerified: convert.BoolVal(u.IsVerified),
TokenVersion: u.TokenVersion,
IsDeleted: convert.BoolVal(u.IsDeleted),
CreatedAt: convert.TimeToPtr(u.CreatedAt),
UpdatedAt: convert.TimeToPtr(u.UpdatedAt),
Roles: RolesToResponse(u.Roles),
}
}
func UsersEntityToResponse(rs []*UserEntity) []*response.UserResponse {
out := make([]*response.UserResponse, len(rs))
for i := range rs {
out[i] = rs[i].ToResponse()
}
return out
}