-
Notifications
You must be signed in to change notification settings - Fork 0
/
utils.go
109 lines (96 loc) · 2.53 KB
/
utils.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package utils
import (
"fmt"
"strings"
"time"
"github.com/bwmarrin/snowflake"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)
func GetPayloadFromBody[T any](ctx *gin.Context, p *T) (result T, err error) {
result = *new(T)
err = ctx.BindJSON(&result)
if err != nil {
return result, &InternalError{Message: InternalErrorInvalidPayload}
}
return result, nil
}
func GetQuery(params string, ctx *gin.Context) (*string, error) {
itemId := ctx.Query(params)
if itemId == "" {
return nil, &InternalError{Message: InternalErrorInvalidQuery}
}
return &itemId, nil
}
func GetParams(params string, ctx *gin.Context) (*string, error) {
itemId := ctx.Param(params)
if itemId == "" {
return nil, &InternalError{Message: InternalErrorInvalidParams}
}
return &itemId, nil
}
func CORS(r *gin.Engine) {
r.Use(cors.New(cors.Config{
// アクセス許可するオリジン
AllowOrigins: []string{
"http://localhost:3001",
"http://localhost:3000",
"http://localhost:3002",
},
// アクセス許可するHTTPメソッド
AllowMethods: []string{
"POST",
"GET",
"OPTIONS",
"PATCH",
"DELETE",
},
// 許可するHTTPリクエストヘッダ
AllowHeaders: []string{
"Content-Type",
"Access-Control-Allow-Origin",
"Access-Control-Allow-Headers",
"Authorization",
"Access-Control-Allow-Credentials",
},
// cookieなどの情報を必要とするかどうか
AllowCredentials: true,
// preflightリクエストの結果をキャッシュする時間
MaxAge: 24 * time.Hour,
}))
}
func GenerateRandomString() string {
// Snowflakeノード設定
node, err := snowflake.NewNode(1)
if err != nil {
panic(err)
}
// Snowflake ID生成
id := node.Generate().Int64()
// 使用する文字セット
charSet := "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
// 文字列生成
var sb strings.Builder
base := int64(len(charSet))
for id > 0 {
sb.WriteByte(charSet[id%base])
id /= base
}
// 文字列を反転させる(SnowflakeのIDは末尾がよりランダムとなるため)
str := sb.String()
runes := []rune(str)
for i, j := 0, len(runes)-1; i < j; i, j = i+1, j-1 {
runes[i], runes[j] = runes[j], runes[i]
}
return string(runes)
}
func ConvertToJST(utcTime time.Time) string {
loc, err := time.LoadLocation("Asia/Tokyo")
if err != nil {
// タイムゾーンの読み込みに失敗した場合のエラーハンドリング
fmt.Println("タイムゾーンの読み込みに失敗しました:", err)
return ""
}
jstTime := utcTime.In(loc)
return jstTime.Format("2006-01-02")
}