feat: release v1.0.0

This commit is contained in:
2026-07-29 22:10:36 +08:00
parent ee9f50b859
commit c903b5a6b5
81 changed files with 2776 additions and 1044 deletions

View File

@@ -0,0 +1,9 @@
package auth
import "time"
type RefreshTokenRecord struct {
UserID int32 `json:"user_id"`
CreatedAt time.Time `json:"created_at"`
ExpiresAt time.Time `json:"expires_at"`
}

View File

@@ -3,9 +3,11 @@ package request
type CreateCategoryRequest struct {
Name string `json:"name" validate:"required,min=1"`
Code string `json:"code" validate:"required,min=1"`
Sort *int32 `json:"sort" validate:"required"`
}
type UpdateCategoryRequest struct {
Name *string `json:"name" validate:"omitempty,min=1"`
Code *string `json:"code" validate:"omitempty,min=1"`
Sort *int32 `json:"sort" validate:"omitempty"`
}

View File

@@ -6,7 +6,7 @@ import (
type CreatePostRequest struct {
Title string `json:"title" validate:"required,min=1"`
CoverID *int32 `json:"cover_id" validate:"required,min=1"`
CoverID int32 `json:"cover_id" validate:"required,min=1"`
Slug string `json:"slug" validate:"required,min=0"`
Content string `json:"content" validate:"required,min=0"`
Summary string `json:"summary" validate:"required,min=0"`
@@ -14,6 +14,7 @@ type CreatePostRequest struct {
Sort *int32 `json:"sort" validate:"required,min=0"`
PublishedAt time.Time `json:"published_at" validate:"required"`
CategoryID *int32 `json:"category_id" validate:"required,min=1"`
Tags []int32 `json:"tags" validate:"omitempty,dive,min=1"`
}
type UpdatePostRequest struct {
@@ -27,4 +28,5 @@ type UpdatePostRequest struct {
Sort *int32 `json:"sort" validate:"omitempty,min=0"`
PublishedAt *time.Time `json:"published_at" validate:"omitempty"`
CategoryID *int32 `json:"category_id" validate:"required,min=1"`
Tags []int32 `json:"tags" validate:"omitempty,dive,min=1"`
}

View File

@@ -1,5 +1,7 @@
package request
import "server/internal/model/common"
type CreateSysApiRequest struct {
Name string `json:"name" validate:"required,min=1,max=100"`
GroupName string `json:"group_name" validate:"required,min=1,max=100"`
@@ -15,3 +17,9 @@ type UpdateSysApiRequest struct {
Method string `json:"method" validate:"required,oneof=GET POST PUT PATCH DELETE"`
Sort *int32 `json:"sort" validate:"required,min=0"`
}
type SearchSysApiParams struct {
common.Pagination
Method string `json:"method" form:"method" validate:"omitempty,oneof=GET POST PUT PATCH DELETE"`
GroupName string `json:"group_name" form:"group_name" validate:"omitempty,max=100"`
}

View File

@@ -6,7 +6,7 @@ import (
type CreateSysMenuRequest struct {
Name string `json:"name" validate:"required,min=1,max=100"`
Path string `json:"path" validate:"required,min=1,max=100"`
Path *string `json:"path" validate:"omitempty,max=100"`
Type *int16 `json:"type" validate:"required,oneof=0 1 2"`
Component *string `json:"component" validate:"omitempty"`
Hidden *bool `json:"hidden" validate:"omitempty"`
@@ -19,13 +19,13 @@ type CreateSysMenuRequest struct {
type UpdateSysMenuRequest struct {
Name *string `json:"name" validate:"omitempty,min=1,max=100"`
Path *string `json:"path" validate:"omitempty,min=1,max=100"`
Path *string `json:"path" validate:"omitempty,max=100"`
Type *int16 `json:"type" validate:"omitempty,oneof=0 1 2"`
Component *string `json:"component" validate:"omitempty"`
Hidden *bool `json:"hidden" validate:"omitempty"`
Sort *int32 `json:"sort" validate:"omitempty,min=0"`
Status *int16 `json:"status" validate:"omitempty,oneof=0 1"`
ParentID validator.NullInt32 `json:"parent_id" validate:"omitempty"`
Icon *int32 `json:"icon" validate:"omitempty"`
Icon validator.NullInt32 `json:"icon" validate:"omitempty"`
PermissionCode *string `json:"permission_code" validate:"omitempty,min=1,max=100"`
}

View File

@@ -1 +0,0 @@
package request

View File

@@ -1,12 +1,14 @@
package request
type CreateSysRoleRequest struct {
Name string `json:"name" validate:"required,min=1,max=100"`
Code string `json:"code" validate:"required,max=100"`
Name string `json:"name" validate:"required,min=1,max=100"`
Code string `json:"code" validate:"required,max=100"`
Status *int16 `json:"status" validate:"required,oneof=0 1"`
}
type UpdateSysRoleRequest struct {
Name *string `json:"name" validate:"min=1,max=100"`
Name *string `json:"name" validate:"min=1,max=100"`
Status *int16 `json:"status" validate:"omitempty,oneof=0 1"`
}
type SetSysRoleMenusRequest struct {

View File

@@ -1,19 +1,22 @@
package request
import (
"server/internal/model/common"
"server/internal/pkg/validator"
)
type CreateSysUserRequest struct {
Username string `json:"username" validate:"required"`
Username string `json:"username" validate:"required,min=1,max=50"`
Account string `json:"account" validate:"required,min=5,max=100"`
Password string `json:"password" validate:"required,min=6,max=255"`
AvatarID *int32 `json:"avatar_id" validate:"omitempty"`
Status *int16 `json:"status" validate:"oneof=0 1"`
}
type UpdateSysUserRequest struct {
Username *string `json:"username" validate:"omitempty,min=0,max=50"`
Username *string `json:"username" validate:"omitempty,min=1,max=50"`
AvatarID validator.NullInt32 `json:"avatar_id" validate:"omitempty"`
Status *int16 `json:"status" validate:"omitempty,oneof=0 1"`
}
type UpdateSysUserPassword struct {
@@ -28,3 +31,8 @@ type LoginRequest struct {
Account string `json:"account" validate:"required,min=5,max=100"`
Password string `json:"password" validate:"required,min=6,max=255"`
}
type SearchSysUserParams struct {
common.Pagination
Username string `json:"username" validate:"omitempty,max=50"`
}

View File

@@ -0,0 +1,13 @@
package request
type CreateTagRequest struct {
Name string `json:"name" validate:"required,min=1"`
Code string `json:"code" validate:"required,min=1"`
Sort *int32 `json:"sort" validate:"required"`
}
type UpdateTagRequest struct {
Name *string `json:"name" validate:"omitempty,min=1"`
Code *string `json:"code" validate:"omitempty,min=1"`
Sort *int32 `json:"sort" validate:"omitempty"`
}

View File

@@ -1,12 +1,12 @@
package response
import (
db "server/internal/db/sqlc"
"server/internal/db/sqlc"
"server/internal/pkg/httputil"
)
func ToFiles(files []db.File) []db.File {
result := make([]db.File, len(files))
func ToFiles(files []sqlc.File) []sqlc.File {
result := make([]sqlc.File, len(files))
for i := range files {
result[i] = files[i]
result[i].FilePath = httputil.BuildFileUrl(&files[i].FilePath)

View File

@@ -1,7 +1,7 @@
package response
import (
db "server/internal/db/sqlc"
"server/internal/db/sqlc"
"server/internal/pkg/httputil"
"time"
)
@@ -13,12 +13,13 @@ type SysUserRolesResponse struct {
}
type SysUserInfo struct {
ID int32 `json:"id"`
Account string `json:"account"`
Username string `json:"username"`
AvatarUrl string `json:"avatar_url"`
Roles []string `json:"roles"`
Menus []db.SysMenu `json:"menus"`
ID int32 `json:"id"`
Account string `json:"account"`
Username string `json:"username"`
AvatarUrl string `json:"avatar_url"`
Roles []string `json:"roles"`
Menus []sqlc.SysMenu `json:"menus"`
Permissions []string `json:"permissions"`
}
type LoginResponse struct {
@@ -28,18 +29,26 @@ type LoginResponse struct {
RefreshTokenExp time.Time `json:"refresh_token_exp"`
}
func NewSysUserInfo(user db.GetSysUserByIDRow, roles []db.SysRole, menus []db.SysMenu) *SysUserInfo {
func NewSysUserInfo(user sqlc.GetSysUserByIDRow, roles []sqlc.SysRole, menus []sqlc.SysMenu, p []*string) *SysUserInfo {
roleCodes := make([]string, len(roles))
for i, role := range roles {
roleCodes[i] = role.Code
}
permissions := make([]string, 0, len(p))
for _, code := range p {
if code != nil {
permissions = append(permissions, *code)
}
}
return &SysUserInfo{
ID: user.ID,
Account: user.Account,
Username: user.Username,
AvatarUrl: httputil.BuildFileUrl(user.AvatarUrl),
Roles: roleCodes,
Menus: menus,
ID: user.ID,
Account: user.Account,
Username: user.Username,
AvatarUrl: httputil.BuildFileUrl(user.AvatarUrl),
Roles: roleCodes,
Menus: menus,
Permissions: permissions,
}
}