Use generator to generate exceptions from yaml
Signed-off-by: Asai Neko <sugar@sne.moe>
This commit is contained in:
8
cmd/gen_exception/exception.tmpl
Normal file
8
cmd/gen_exception/exception.tmpl
Normal file
@@ -0,0 +1,8 @@
|
||||
// Code generated by gen-exception; DO NOT EDIT.
|
||||
package exception
|
||||
|
||||
const (
|
||||
{{- range .Items }}
|
||||
{{ .Name }} = "{{ .Value }}"
|
||||
{{- end }}
|
||||
)
|
||||
97
cmd/gen_exception/main.go
Normal file
97
cmd/gen_exception/main.go
Normal file
@@ -0,0 +1,97 @@
|
||||
//go:build ignore
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"text/template"
|
||||
|
||||
"golang.org/x/text/cases"
|
||||
"golang.org/x/text/language"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
type ErrorItem struct {
|
||||
Name string
|
||||
Value string
|
||||
}
|
||||
|
||||
type TplData struct {
|
||||
Items []ErrorItem
|
||||
}
|
||||
|
||||
func toCamel(s string) string {
|
||||
caser := cases.Title(language.English)
|
||||
s = strings.ReplaceAll(s, "-", "_")
|
||||
parts := strings.Split(s, "_")
|
||||
for i := range parts {
|
||||
parts[i] = caser.String(parts[i])
|
||||
}
|
||||
return strings.Join(parts, "")
|
||||
}
|
||||
|
||||
func recursiveParse(prefix string, raw any, items *[]ErrorItem) {
|
||||
switch v := raw.(type) {
|
||||
case map[string]any:
|
||||
for key, val := range v {
|
||||
recursiveParse(prefix+toCamel(key), val, items)
|
||||
}
|
||||
case string:
|
||||
*items = append(*items, ErrorItem{
|
||||
Name: prefix,
|
||||
Value: v,
|
||||
})
|
||||
case int, int64:
|
||||
*items = append(*items, ErrorItem{
|
||||
Name: prefix,
|
||||
Value: fmt.Sprintf("%v", v),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func main() {
|
||||
yamlDir := "internal/exception/definitions"
|
||||
outputDir := "internal/exception"
|
||||
tplPath := "cmd/gen_exception/exception.tmpl"
|
||||
|
||||
if _, err := os.Stat(tplPath); os.IsNotExist(err) {
|
||||
log.Fatalf("Cannot found tmpl %s", tplPath)
|
||||
}
|
||||
|
||||
funcMap := template.FuncMap{"ToCamel": toCamel}
|
||||
tmpl := template.Must(template.New("exception.tmpl").Funcs(funcMap).ParseFiles(tplPath))
|
||||
|
||||
os.MkdirAll(outputDir, 0755)
|
||||
|
||||
files, _ := filepath.Glob(filepath.Join(yamlDir, "*.yaml"))
|
||||
for _, yamlFile := range files {
|
||||
content, err := os.ReadFile(yamlFile)
|
||||
if err != nil {
|
||||
log.Printf("Read file error: %v", err)
|
||||
continue
|
||||
}
|
||||
|
||||
var rawData any
|
||||
if err := yaml.Unmarshal(content, &rawData); err != nil {
|
||||
log.Printf("Unmarshal error in %s: %v", yamlFile, err)
|
||||
continue
|
||||
}
|
||||
|
||||
var items []ErrorItem
|
||||
recursiveParse("", rawData, &items)
|
||||
|
||||
baseName := strings.TrimSuffix(filepath.Base(yamlFile), filepath.Ext(yamlFile))
|
||||
outputFileName := baseName + "_gen.go"
|
||||
outputPath := filepath.Join(outputDir, outputFileName)
|
||||
|
||||
f, _ := os.Create(outputPath)
|
||||
tmpl.Execute(f, TplData{Items: items})
|
||||
f.Close()
|
||||
|
||||
fmt.Printf("Generated: %s (%d constants)\n", outputPath, len(items))
|
||||
}
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package exception
|
||||
|
||||
const (
|
||||
CommonErrorInvalidInput = "00001"
|
||||
CommonErrorUnauthorized = "00002"
|
||||
CommonErrorInternal = "00003"
|
||||
CommonErrorPermissionDenied = "00004"
|
||||
CommonErrorUuidParseFailed = "00005"
|
||||
CommonErrorDatabase = "00006"
|
||||
CommonErrorMissingUserId = "00007"
|
||||
CommonErrorUserNotFound = "00008"
|
||||
)
|
||||
@@ -1,32 +0,0 @@
|
||||
package exception
|
||||
|
||||
// Middleware Service Endpoints
|
||||
const (
|
||||
MiddlewareEndpoint = "01"
|
||||
)
|
||||
|
||||
// Auth Service Endpoints
|
||||
const (
|
||||
AuthRedirectEndpoint = "01"
|
||||
AuthMagicEndpoint = "02"
|
||||
AuthTokenEndpoint = "03"
|
||||
AuthRefreshEndpoint = "04"
|
||||
AuthExchangeEndpoint = "05"
|
||||
)
|
||||
|
||||
// Event Service Endpoints
|
||||
const (
|
||||
EventInfoEndpoint = "01"
|
||||
EventCheckinEndpoint = "02"
|
||||
EventCheckinQueryEndpoint = "03"
|
||||
EventCheckinSubmitEndpoint = "04"
|
||||
)
|
||||
|
||||
// User Service Endpoints
|
||||
const (
|
||||
UserInfoEndpoint = "01"
|
||||
UserUpdateEndpoint = "02"
|
||||
UserListEndpoint = "03"
|
||||
UserFullEndpoint = "04"
|
||||
UserCreateEndpoint = "05"
|
||||
)
|
||||
@@ -1,16 +0,0 @@
|
||||
package exception
|
||||
|
||||
// Middleware Services
|
||||
const (
|
||||
MiddlewareGinLoggerService = "901"
|
||||
MiddlewareJwtService = "902"
|
||||
MiddlewarePermissionService = "903"
|
||||
MiddlewareApiVersionService = "904"
|
||||
)
|
||||
|
||||
// Application Services
|
||||
const (
|
||||
AuthService = "001"
|
||||
UserService = "002"
|
||||
EventService = "003"
|
||||
)
|
||||
@@ -1,60 +0,0 @@
|
||||
package exception
|
||||
|
||||
const (
|
||||
ApiVersionNotFound = "00001"
|
||||
|
||||
// Auth Service
|
||||
// Endpoint: AuthRedirectEndpoint (01)
|
||||
AuthRedirectTokenInvalid = "00001"
|
||||
AuthRedirectClientNotFound = "00002"
|
||||
AuthRedirectUriMismatch = "00003"
|
||||
AuthRedirectInvalidUri = "00004"
|
||||
|
||||
// Endpoint: AuthMagicEndpoint (02)
|
||||
AuthMagicTurnstileFailed = "00001"
|
||||
AuthMagicCodeGenFailed = "00002"
|
||||
AuthMagicInvalidExternalUrl = "00003"
|
||||
AuthMagicInvalidEmailConfig = "00004"
|
||||
|
||||
// Endpoint: AuthTokenEndpoint (03)
|
||||
AuthTokenInvalidToken = "00001"
|
||||
AuthTokenGenFailed = "00002"
|
||||
|
||||
// Endpoint: AuthRefreshEndpoint (04)
|
||||
AuthRefreshInvalidToken = "00001"
|
||||
AuthRefreshRenewFailed = "00002"
|
||||
|
||||
// Endpoint: AuthExchangeEndpoint (05)
|
||||
AuthExchangeGetUserIdFailed = "00001"
|
||||
AuthExchangeCodeGenFailed = "00002"
|
||||
AuthExchangeInvalidRedirectUri = "00003"
|
||||
|
||||
// Event Service
|
||||
// Endpoint: EventInfoEndpoint (01)
|
||||
EventInfoNotFound = "00001"
|
||||
|
||||
// Endpoint: EventCheckinEndpoint (02)
|
||||
EventCheckinGenCodeFailed = "00001"
|
||||
|
||||
// Endpoint: EventCheckinQueryEndpoint (03)
|
||||
EventCheckinQueryRecordNotFound = "00001"
|
||||
|
||||
// Endpoint: EventCheckinSubmitEndpoint (04)
|
||||
// (None)
|
||||
|
||||
// User Service
|
||||
// Endpoint: UserInfoEndpoint (01)
|
||||
// (None)
|
||||
|
||||
// Endpoint: UserUpdateEndpoint (02)
|
||||
// (None)
|
||||
|
||||
// Endpoint: UserListEndpoint (03)
|
||||
UserListMeilisearchFailed = "00001"
|
||||
|
||||
// Endpoint: UserFullEndpoint (04)
|
||||
// (None)
|
||||
|
||||
// Endpoint: UserCreateEndpoint (05)
|
||||
// (None)
|
||||
)
|
||||
@@ -1,8 +0,0 @@
|
||||
package exception
|
||||
|
||||
const (
|
||||
ErrorStatusSuccess = "2"
|
||||
ErrorStatusUser = "4"
|
||||
ErrorStatusServer = "5"
|
||||
ErrorStatusClient = "6"
|
||||
)
|
||||
@@ -1,6 +0,0 @@
|
||||
package exception
|
||||
|
||||
const (
|
||||
ErrorTypeCommon = "0"
|
||||
ErrorTypeSpecific = "1"
|
||||
)
|
||||
3
generate.go
Normal file
3
generate.go
Normal file
@@ -0,0 +1,3 @@
|
||||
package main
|
||||
|
||||
//go:generate go run ./cmd/gen_exception/main.go
|
||||
3
go.mod
3
go.mod
@@ -75,9 +75,10 @@ require (
|
||||
golang.org/x/net v0.48.0 // indirect
|
||||
golang.org/x/sync v0.19.0 // indirect
|
||||
golang.org/x/sys v0.39.0 // indirect
|
||||
golang.org/x/text v0.32.0 // indirect
|
||||
golang.org/x/text v0.33.0 // indirect
|
||||
google.golang.org/protobuf v1.36.11 // indirect
|
||||
gopkg.in/alexcesaro/quotedprintable.v3 v3.0.0-20150716171945-2caba252f4dc // indirect
|
||||
gopkg.in/ini.v1 v1.67.0 // indirect
|
||||
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||
gorm.io/driver/mysql v1.5.6 // indirect
|
||||
)
|
||||
|
||||
2
go.sum
2
go.sum
@@ -348,6 +348,8 @@ golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
|
||||
golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI=
|
||||
golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
|
||||
golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
|
||||
golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
|
||||
golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
|
||||
golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE=
|
||||
golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
||||
13
internal/exception/common_gen.go
Normal file
13
internal/exception/common_gen.go
Normal file
@@ -0,0 +1,13 @@
|
||||
// Code generated by gen-exception; DO NOT EDIT.
|
||||
package exception
|
||||
|
||||
const (
|
||||
CommonErrorInvalidInput = "00001"
|
||||
CommonErrorUnauthorized = "00002"
|
||||
CommonErrorInternal = "00003"
|
||||
CommonErrorPermissionDenied = "00004"
|
||||
CommonErrorUuidParseFailed = "00005"
|
||||
CommonErrorDatabase = "00006"
|
||||
CommonErrorMissingUserId = "00007"
|
||||
CommonErrorUserNotFound = "00008"
|
||||
)
|
||||
10
internal/exception/definitions/common.yaml
Normal file
10
internal/exception/definitions/common.yaml
Normal file
@@ -0,0 +1,10 @@
|
||||
common:
|
||||
error:
|
||||
invalid_input: "00001"
|
||||
unauthorized: "00002"
|
||||
internal: "00003"
|
||||
permission_denied: "00004"
|
||||
uuid_parse_failed: "00005"
|
||||
database: "00006"
|
||||
missing_user_id: "00007"
|
||||
user_not_found: "00008"
|
||||
23
internal/exception/definitions/endpoint.yaml
Normal file
23
internal/exception/definitions/endpoint.yaml
Normal file
@@ -0,0 +1,23 @@
|
||||
endpoint:
|
||||
auth:
|
||||
service:
|
||||
redirect: "01"
|
||||
magic: "02"
|
||||
token: "03"
|
||||
refresh: "04"
|
||||
exchange: "05"
|
||||
event:
|
||||
service:
|
||||
info: "01"
|
||||
checkin: "02"
|
||||
checkin_query: "03"
|
||||
checkin_submit: "04"
|
||||
user:
|
||||
service:
|
||||
info: "01"
|
||||
update: "02"
|
||||
list: "03"
|
||||
full: "04"
|
||||
create: "05"
|
||||
middleware:
|
||||
service: "01"
|
||||
5
internal/exception/definitions/middleware.yaml
Normal file
5
internal/exception/definitions/middleware.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
middleware:
|
||||
gin_logger: "901"
|
||||
jwt: "902"
|
||||
permission: "903"
|
||||
api_version: "904"
|
||||
4
internal/exception/definitions/service.yaml
Normal file
4
internal/exception/definitions/service.yaml
Normal file
@@ -0,0 +1,4 @@
|
||||
service:
|
||||
auth: "001"
|
||||
user: "002"
|
||||
event: "003"
|
||||
27
internal/exception/definitions/specific.yaml
Normal file
27
internal/exception/definitions/specific.yaml
Normal file
@@ -0,0 +1,27 @@
|
||||
api:
|
||||
version:
|
||||
not_found: "00001"
|
||||
auth:
|
||||
redirect:
|
||||
token_invalid: "00001"
|
||||
client_not_found: "00002"
|
||||
uri_mismatch: "00003"
|
||||
invalid_uri: "00004"
|
||||
magic:
|
||||
turnstile_failed: "00001"
|
||||
code_gen_failed: "00002"
|
||||
invalid_external_url: "00003"
|
||||
invalid_email_config: "00004"
|
||||
token:
|
||||
invalid_token: "00001"
|
||||
gen_failed: "00002"
|
||||
refresh:
|
||||
invalid_token: "00001"
|
||||
renew_failed: "00002"
|
||||
exchange:
|
||||
get_user_id_failed: "00001"
|
||||
code_gen_failed: "00002"
|
||||
invalid_redirect_uri: "00003"
|
||||
user:
|
||||
list:
|
||||
meilisearch_failed: "00001"
|
||||
5
internal/exception/definitions/status.yaml
Normal file
5
internal/exception/definitions/status.yaml
Normal file
@@ -0,0 +1,5 @@
|
||||
status:
|
||||
success: "2"
|
||||
user: "4"
|
||||
server: "5"
|
||||
client: "6"
|
||||
3
internal/exception/definitions/types.yaml
Normal file
3
internal/exception/definitions/types.yaml
Normal file
@@ -0,0 +1,3 @@
|
||||
type:
|
||||
common: "1"
|
||||
specific: "0"
|
||||
20
internal/exception/endpoint_gen.go
Normal file
20
internal/exception/endpoint_gen.go
Normal file
@@ -0,0 +1,20 @@
|
||||
// Code generated by gen-exception; DO NOT EDIT.
|
||||
package exception
|
||||
|
||||
const (
|
||||
EndpointAuthServiceExchange = "05"
|
||||
EndpointAuthServiceRedirect = "01"
|
||||
EndpointAuthServiceMagic = "02"
|
||||
EndpointAuthServiceToken = "03"
|
||||
EndpointAuthServiceRefresh = "04"
|
||||
EndpointEventServiceCheckinQuery = "03"
|
||||
EndpointEventServiceCheckinSubmit = "04"
|
||||
EndpointEventServiceInfo = "01"
|
||||
EndpointEventServiceCheckin = "02"
|
||||
EndpointUserServiceList = "03"
|
||||
EndpointUserServiceFull = "04"
|
||||
EndpointUserServiceCreate = "05"
|
||||
EndpointUserServiceInfo = "01"
|
||||
EndpointUserServiceUpdate = "02"
|
||||
EndpointMiddlewareService = "01"
|
||||
)
|
||||
9
internal/exception/middleware_gen.go
Normal file
9
internal/exception/middleware_gen.go
Normal file
@@ -0,0 +1,9 @@
|
||||
// Code generated by gen-exception; DO NOT EDIT.
|
||||
package exception
|
||||
|
||||
const (
|
||||
MiddlewareGinLogger = "901"
|
||||
MiddlewareJwt = "902"
|
||||
MiddlewarePermission = "903"
|
||||
MiddlewareApiVersion = "904"
|
||||
)
|
||||
8
internal/exception/service_gen.go
Normal file
8
internal/exception/service_gen.go
Normal file
@@ -0,0 +1,8 @@
|
||||
// Code generated by gen-exception; DO NOT EDIT.
|
||||
package exception
|
||||
|
||||
const (
|
||||
ServiceUser = "002"
|
||||
ServiceEvent = "003"
|
||||
ServiceAuth = "001"
|
||||
)
|
||||
22
internal/exception/specific_gen.go
Normal file
22
internal/exception/specific_gen.go
Normal file
@@ -0,0 +1,22 @@
|
||||
// Code generated by gen-exception; DO NOT EDIT.
|
||||
package exception
|
||||
|
||||
const (
|
||||
ApiVersionNotFound = "00001"
|
||||
AuthRefreshInvalidToken = "00001"
|
||||
AuthRefreshRenewFailed = "00002"
|
||||
AuthExchangeGetUserIdFailed = "00001"
|
||||
AuthExchangeCodeGenFailed = "00002"
|
||||
AuthExchangeInvalidRedirectUri = "00003"
|
||||
AuthRedirectClientNotFound = "00002"
|
||||
AuthRedirectUriMismatch = "00003"
|
||||
AuthRedirectInvalidUri = "00004"
|
||||
AuthRedirectTokenInvalid = "00001"
|
||||
AuthMagicCodeGenFailed = "00002"
|
||||
AuthMagicInvalidExternalUrl = "00003"
|
||||
AuthMagicInvalidEmailConfig = "00004"
|
||||
AuthMagicTurnstileFailed = "00001"
|
||||
AuthTokenInvalidToken = "00001"
|
||||
AuthTokenGenFailed = "00002"
|
||||
UserListMeilisearchFailed = "00001"
|
||||
)
|
||||
9
internal/exception/status_gen.go
Normal file
9
internal/exception/status_gen.go
Normal file
@@ -0,0 +1,9 @@
|
||||
// Code generated by gen-exception; DO NOT EDIT.
|
||||
package exception
|
||||
|
||||
const (
|
||||
StatusClient = "6"
|
||||
StatusSuccess = "2"
|
||||
StatusUser = "4"
|
||||
StatusServer = "5"
|
||||
)
|
||||
7
internal/exception/types_gen.go
Normal file
7
internal/exception/types_gen.go
Normal file
@@ -0,0 +1,7 @@
|
||||
// Code generated by gen-exception; DO NOT EDIT.
|
||||
package exception
|
||||
|
||||
const (
|
||||
TypeCommon = "1"
|
||||
TypeSpecific = "0"
|
||||
)
|
||||
@@ -1,7 +1,7 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/pkgs/authtoken"
|
||||
"nixcn-cms/utils"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package middleware
|
||||
|
||||
import (
|
||||
"nixcn-cms/data"
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"fmt"
|
||||
"net/url"
|
||||
"nixcn-cms/data"
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/pkgs/authcode"
|
||||
"nixcn-cms/utils"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package auth
|
||||
|
||||
import (
|
||||
"net/url"
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/pkgs/authcode"
|
||||
"nixcn-cms/pkgs/email"
|
||||
"nixcn-cms/pkgs/turnstile"
|
||||
|
||||
@@ -3,7 +3,7 @@ package auth
|
||||
import (
|
||||
"net/url"
|
||||
"nixcn-cms/data"
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/pkgs/authcode"
|
||||
"nixcn-cms/utils"
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package auth
|
||||
|
||||
import (
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/pkgs/authtoken"
|
||||
"nixcn-cms/utils"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package auth
|
||||
|
||||
import (
|
||||
"nixcn-cms/data"
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/pkgs/authcode"
|
||||
"nixcn-cms/pkgs/authtoken"
|
||||
"nixcn-cms/utils"
|
||||
|
||||
@@ -2,7 +2,7 @@ package event
|
||||
|
||||
import (
|
||||
"nixcn-cms/data"
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/utils"
|
||||
"time"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package event
|
||||
|
||||
import (
|
||||
"nixcn-cms/data"
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/utils"
|
||||
"time"
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@ package user
|
||||
|
||||
import (
|
||||
"nixcn-cms/data"
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
@@ -2,7 +2,7 @@ package user
|
||||
|
||||
import (
|
||||
"nixcn-cms/data"
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/utils"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
|
||||
@@ -2,7 +2,7 @@ package user
|
||||
|
||||
import (
|
||||
"nixcn-cms/data"
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/utils"
|
||||
"strconv"
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package user
|
||||
import (
|
||||
"net/url"
|
||||
"nixcn-cms/data"
|
||||
"nixcn-cms/exception"
|
||||
"nixcn-cms/internal/cryptography"
|
||||
"nixcn-cms/internal/exception"
|
||||
"nixcn-cms/utils"
|
||||
"unicode/utf8"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user