u
This commit is contained in:
1 parent
8408cf779f
commit
25a9e41025
58 files changed
+2079
-6308
No files matched your search
@@ -1,28 +1,12 @@
|
||||
import type { LoginDefaultParams, LoginDefaultResult, RegisterDefaultParams } from '@/types/auth'
|
||||
import alovaInstance from '../index'
|
||||
|
||||
const API_PREFIX = '/auth'
|
||||
|
||||
interface RegisterDefaultParams {
|
||||
account: string
|
||||
password: string
|
||||
}
|
||||
|
||||
export function registerDefaultApi(params: RegisterDefaultParams) {
|
||||
return alovaInstance.Post<ResponseData<any>>(`${API_PREFIX}/register/default`, params)
|
||||
}
|
||||
|
||||
interface LoginDefaultParams {
|
||||
account: string
|
||||
password: string
|
||||
}
|
||||
interface LoginDefaultResult {
|
||||
token: string
|
||||
refreshToken: string
|
||||
userId: number
|
||||
username: string
|
||||
seqNo: number
|
||||
gender: number
|
||||
}
|
||||
export function loginDefaultApi(params: LoginDefaultParams) {
|
||||
return alovaInstance.Post<ResponseData<LoginDefaultResult>>(`${API_PREFIX}/login/default`, params)
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
import type { Method } from 'alova'
|
||||
import type { AxiosError } from 'axios'
|
||||
import type { RefreshTokenResult } from '@/types/auth'
|
||||
import { axiosRequestAdapter } from '@alova/adapter-axios'
|
||||
import { createAlova } from 'alova'
|
||||
import { router } from 'expo-router'
|
||||
@@ -62,11 +63,11 @@ const alovaInstance = createAlova({
|
||||
}
|
||||
|
||||
// 调用刷新接口
|
||||
const res = await alovaInstance.Get<ResponseData<string>>('/auth/refresh/token', {
|
||||
const res = await alovaInstance.Get<ResponseData<RefreshTokenResult>>('/auth/refreshToken', {
|
||||
headers: { refreshToken },
|
||||
}).send()
|
||||
|
||||
const newToken = res.data
|
||||
const newToken = res.data.refreshToken
|
||||
|
||||
// 更新 store
|
||||
useUserStore.getState().setUserInfo({
|
||||
|
||||
@@ -44,7 +44,7 @@ export const useMoneyCategoryStore = create<MoneyCategoryStore>()(
|
||||
try {
|
||||
const res = await queryMoneyCategoryApi()
|
||||
if (res.isSuccess) {
|
||||
set({ categories: res.data || [] })
|
||||
set({ categories: res.data.categories || [] })
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
export interface RefreshTokenResult {
|
||||
refreshToken: string
|
||||
}
|
||||
|
||||
export interface RegisterDefaultParams {
|
||||
account: string
|
||||
password: string
|
||||
}
|
||||
|
||||
export interface LoginDefaultParams {
|
||||
account: string
|
||||
password: string
|
||||
}
|
||||
|
||||
export interface LoginDefaultResult {
|
||||
token: string
|
||||
refreshToken: string
|
||||
userId: number
|
||||
username: string
|
||||
seqNo: number
|
||||
gender: number
|
||||
}
|
||||
@@ -8,11 +8,13 @@ export interface MoneyCategoryBase {
|
||||
}
|
||||
|
||||
// 查询
|
||||
export interface MoneyCategoryItem extends MoneyCategoryBase {
|
||||
export interface MoneyCategoryItem extends Omit<MoneyCategoryBase, 'user_id'> {
|
||||
|
||||
}
|
||||
|
||||
export type QueryMoneyCategoryResult = MoneyCategoryBase[]
|
||||
export interface QueryMoneyCategoryResult {
|
||||
categories: MoneyCategoryItem[]
|
||||
}
|
||||
|
||||
export interface DeleteMoneyCategoryParams {
|
||||
id: number
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package auth
|
||||
|
||||
import (
|
||||
"cn/oneao/base-go/db"
|
||||
dbtype "cn/oneao/base-go/db/sqlc"
|
||||
"cn/oneao/base-go/logx"
|
||||
"cn/oneao/base-go/utils/jwtx"
|
||||
"cn/oneao/base-go/utils/response"
|
||||
"context"
|
||||
|
||||
"cn/oneao/base-go/biz/model/auth"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// LoginDefault .
|
||||
// @router /auth/login/default [POST]
|
||||
func LoginDefault(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req auth.LoginDefaultReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// 登录
|
||||
account := req.Account
|
||||
password := req.Password
|
||||
|
||||
params := dbtype.GetUserForLoginParams{
|
||||
Account: account,
|
||||
Password: password,
|
||||
}
|
||||
loginUser, err := db.Queries.GetUserForLogin(ctx, params)
|
||||
|
||||
if err != nil {
|
||||
response.Fail(c).Message("账号或密码错误!").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 异步更新登录事件
|
||||
go func(userID int64) {
|
||||
time, err := db.Queries.UpdateUserLoginLastTime(ctx, userID)
|
||||
if err != nil || time == 0 {
|
||||
logx.CtxError(ctx, "更新用户登录时间失败,UserID=%d, err=%v", loginUser.ID, err)
|
||||
}
|
||||
}(loginUser.ID)
|
||||
|
||||
// 包装数据
|
||||
token, err := jwtx.CreateAccessToken(loginUser.ID)
|
||||
refreshToken, err := jwtx.CreateRefreshToken(loginUser.ID)
|
||||
|
||||
resp := new(auth.LoginDefaultResp)
|
||||
|
||||
resp.Token = token
|
||||
resp.RefreshToken = refreshToken
|
||||
resp.UserId = loginUser.ID
|
||||
resp.Gender = loginUser.Gender.Int32
|
||||
resp.SeqNo = loginUser.SeqNo.Int32
|
||||
resp.Username = loginUser.Username.String
|
||||
|
||||
response.Success(c).Data(resp).Send()
|
||||
}
|
||||
@@ -0,0 +1,118 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package auth
|
||||
|
||||
import (
|
||||
auth "cn/oneao/base-go/biz/model/auth"
|
||||
"cn/oneao/base-go/db"
|
||||
dbtype "cn/oneao/base-go/db/sqlc"
|
||||
"cn/oneao/base-go/utils/errorx"
|
||||
"cn/oneao/base-go/utils/idgen"
|
||||
"cn/oneao/base-go/utils/response"
|
||||
"context"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
"github.com/jackc/pgx/v5"
|
||||
)
|
||||
|
||||
// RegisterDefault .
|
||||
// @router /auth/register/default [POST]
|
||||
func RegisterDefault(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req auth.RegisterDefaultReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
account := req.Account
|
||||
password := req.Password
|
||||
|
||||
_, err = db.Queries.GetUserByAccount(ctx, account)
|
||||
if err != nil {
|
||||
if errorx.IsNotFound(err) {
|
||||
// 忽略
|
||||
} else {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
} else {
|
||||
response.Fail(c).Message("该账号已被注册").Send()
|
||||
return
|
||||
}
|
||||
|
||||
// 开启事务
|
||||
tx, err := db.DB.BeginTx(ctx, pgx.TxOptions{})
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
defer func() {
|
||||
if err != nil {
|
||||
err := tx.Rollback(ctx)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
} else {
|
||||
err := tx.Commit(ctx)
|
||||
if err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
// 插入用户
|
||||
params := dbtype.InsertUserParams{
|
||||
ID: idgen.NextId(),
|
||||
Account: account,
|
||||
Password: password,
|
||||
}
|
||||
|
||||
insert, err := db.Queries.WithTx(tx).InsertUser(ctx, params)
|
||||
if err != nil || insert == 0 {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 初始化用户分类
|
||||
err = initMoneyCategoryTx(ctx, tx, params.ID)
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 注册成功
|
||||
response.Success(c).Message("注册成功").Send()
|
||||
}
|
||||
|
||||
func initMoneyCategoryTx(ctx context.Context, tx pgx.Tx, userId int64) error {
|
||||
sysCategories, err := db.Queries.ListMoneySysCategory(ctx)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if len(sysCategories) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
userCategories := make([]dbtype.BatchInsertMoneyUserCategoriesParams, 0, len(sysCategories))
|
||||
for _, sysCat := range sysCategories {
|
||||
userCategories = append(userCategories, dbtype.BatchInsertMoneyUserCategoriesParams{
|
||||
ID: idgen.NextId(),
|
||||
UserID: userId,
|
||||
Name: sysCat.Name,
|
||||
Icon: sysCat.Icon,
|
||||
Type: sysCat.Type,
|
||||
SortNumber: sysCat.SortNumber,
|
||||
})
|
||||
}
|
||||
|
||||
_, err = db.Queries.WithTx(tx).BatchInsertMoneyUserCategories(ctx, userCategories)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,59 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package auth
|
||||
|
||||
import (
|
||||
"cn/oneao/base-go/utils/errorx"
|
||||
"cn/oneao/base-go/utils/jwtx"
|
||||
"cn/oneao/base-go/utils/response"
|
||||
"context"
|
||||
|
||||
auth "cn/oneao/base-go/biz/model/auth"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// RefreshAccessToken .
|
||||
// @router /auth/refreshToken [POST]
|
||||
func RefreshAccessToken(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req auth.RefreshAccessTokenReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
refreshToken := string(c.GetHeader("refreshToken"))
|
||||
if refreshToken == "" {
|
||||
response.Fail(c).
|
||||
Code(response.HttpCode.Unauthorized).
|
||||
Send()
|
||||
return
|
||||
}
|
||||
|
||||
tokenResult := jwtx.VerifyToken(refreshToken)
|
||||
|
||||
if !tokenResult.IsValid || tokenResult.IsExpired {
|
||||
// Refresh Token 无效或过期,需要重新登录
|
||||
response.Fail(c).
|
||||
Code(response.HttpCode.Unauthorized).
|
||||
Send()
|
||||
return
|
||||
}
|
||||
|
||||
userID := tokenResult.Claims.UserID
|
||||
// 生成新的 Access Token
|
||||
newAccessToken, err := jwtx.CreateAccessToken(userID)
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(auth.RefreshAccessTokenResp)
|
||||
resp.AccessToken = newAccessToken
|
||||
|
||||
response.Success(c).
|
||||
Data(resp).
|
||||
Send()
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package login
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
login "cn/oneao/base-go/biz/model/auth/login"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// LoginDefault .
|
||||
// @router /auth/login/default [POST]
|
||||
func LoginDefault(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req login.LoginDefaultReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(login.LoginDefaultResp)
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -0,0 +1,54 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package money_category
|
||||
|
||||
import (
|
||||
money_category "cn/oneao/base-go/biz/model/money_category"
|
||||
"cn/oneao/base-go/biz/router/middleware"
|
||||
"cn/oneao/base-go/db"
|
||||
"cn/oneao/base-go/utils/errorx"
|
||||
"cn/oneao/base-go/utils/response"
|
||||
"context"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// QueryUserMoneyCategory .
|
||||
// @router /money/category [GET]
|
||||
func QueryUserMoneyCategory(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req money_category.QueryUserMoneyCategoryReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
userID := middleware.GetUserID(ctx)
|
||||
|
||||
// 查询用户分类
|
||||
moneyUserCategories, err := db.Queries.FindUserMoneyCategoriesByUserID(ctx, userID)
|
||||
if err != nil {
|
||||
errorx.AddError(c, err)
|
||||
return
|
||||
}
|
||||
|
||||
// 构造返回数据,切片类型是 []*UserMoneyCategory
|
||||
resp := &money_category.QueryUserMoneyCategoryResp{
|
||||
Categories: make([]*money_category.UserMoneyCategory, 0, len(moneyUserCategories)),
|
||||
}
|
||||
|
||||
for _, c := range moneyUserCategories {
|
||||
category := &money_category.UserMoneyCategory{
|
||||
Id: c.ID,
|
||||
Name: c.Name,
|
||||
Icon: c.Icon,
|
||||
|
||||
Type: c.Type.Int32,
|
||||
SortNumber: c.SortNumber.Int32,
|
||||
}
|
||||
resp.Categories = append(resp.Categories, category)
|
||||
}
|
||||
|
||||
response.Success(c).Data(resp).Send()
|
||||
}
|
||||
@@ -1,27 +0,0 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package register
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
register "cn/oneao/base-go/biz/model/auth/register"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/cloudwego/hertz/pkg/protocol/consts"
|
||||
)
|
||||
|
||||
// RegisterDefault .
|
||||
// @router /auth/register/default [POST]
|
||||
func RegisterDefault(ctx context.Context, c *app.RequestContext) {
|
||||
var err error
|
||||
var req register.RegisterDefaultReq
|
||||
err = c.BindAndValidate(&req)
|
||||
if err != nil {
|
||||
c.String(consts.StatusBadRequest, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
resp := new(register.RegisterDefaultResp)
|
||||
|
||||
c.JSON(consts.StatusOK, resp)
|
||||
}
|
||||
@@ -3,7 +3,7 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.28.0
|
||||
// protoc v6.33.1
|
||||
// protoc v4.25.3
|
||||
// source: api.proto
|
||||
|
||||
package api
|
||||
|
||||
@@ -0,0 +1,540 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.28.0
|
||||
// protoc v4.25.3
|
||||
// source: auth.proto
|
||||
|
||||
package auth
|
||||
|
||||
import (
|
||||
_ "cn/oneao/base-go/biz/model/api"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type LoginDefaultReq struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Account string `protobuf:"bytes,1,opt,name=Account,proto3" form:"account" json:"account" vd:"$!=''"`
|
||||
Password string `protobuf:"bytes,2,opt,name=Password,proto3" form:"password" json:"password" vd:"$!=''"`
|
||||
}
|
||||
|
||||
func (x *LoginDefaultReq) Reset() {
|
||||
*x = LoginDefaultReq{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_auth_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *LoginDefaultReq) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*LoginDefaultReq) ProtoMessage() {}
|
||||
|
||||
func (x *LoginDefaultReq) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_auth_proto_msgTypes[0]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use LoginDefaultReq.ProtoReflect.Descriptor instead.
|
||||
func (*LoginDefaultReq) Descriptor() ([]byte, []int) {
|
||||
return file_auth_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (x *LoginDefaultReq) GetAccount() string {
|
||||
if x != nil {
|
||||
return x.Account
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *LoginDefaultReq) GetPassword() string {
|
||||
if x != nil {
|
||||
return x.Password
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type LoginDefaultResp struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Token string `protobuf:"bytes,1,opt,name=token,proto3" form:"token" json:"token" query:"token"`
|
||||
RefreshToken string `protobuf:"bytes,2,opt,name=refreshToken,proto3" form:"refreshToken" json:"refreshToken" query:"refreshToken"`
|
||||
UserId int64 `protobuf:"varint,3,opt,name=userId,proto3" form:"userId" json:"userId" query:"userId"`
|
||||
Username string `protobuf:"bytes,4,opt,name=username,proto3" form:"username" json:"username" query:"username"`
|
||||
SeqNo int32 `protobuf:"varint,5,opt,name=seqNo,proto3" form:"seqNo" json:"seqNo" query:"seqNo"`
|
||||
Gender int32 `protobuf:"varint,6,opt,name=gender,proto3" form:"gender" json:"gender" query:"gender"`
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) Reset() {
|
||||
*x = LoginDefaultResp{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_auth_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*LoginDefaultResp) ProtoMessage() {}
|
||||
|
||||
func (x *LoginDefaultResp) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_auth_proto_msgTypes[1]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use LoginDefaultResp.ProtoReflect.Descriptor instead.
|
||||
func (*LoginDefaultResp) Descriptor() ([]byte, []int) {
|
||||
return file_auth_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetToken() string {
|
||||
if x != nil {
|
||||
return x.Token
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetRefreshToken() string {
|
||||
if x != nil {
|
||||
return x.RefreshToken
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetUserId() int64 {
|
||||
if x != nil {
|
||||
return x.UserId
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetUsername() string {
|
||||
if x != nil {
|
||||
return x.Username
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetSeqNo() int32 {
|
||||
if x != nil {
|
||||
return x.SeqNo
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetGender() int32 {
|
||||
if x != nil {
|
||||
return x.Gender
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type RegisterDefaultReq struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Account string `protobuf:"bytes,1,opt,name=Account,proto3" form:"account" json:"account" vd:"$!=''"`
|
||||
Password string `protobuf:"bytes,2,opt,name=Password,proto3" form:"password" json:"password" vd:"$!=''"`
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultReq) Reset() {
|
||||
*x = RegisterDefaultReq{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_auth_proto_msgTypes[2]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultReq) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*RegisterDefaultReq) ProtoMessage() {}
|
||||
|
||||
func (x *RegisterDefaultReq) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_auth_proto_msgTypes[2]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use RegisterDefaultReq.ProtoReflect.Descriptor instead.
|
||||
func (*RegisterDefaultReq) Descriptor() ([]byte, []int) {
|
||||
return file_auth_proto_rawDescGZIP(), []int{2}
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultReq) GetAccount() string {
|
||||
if x != nil {
|
||||
return x.Account
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultReq) GetPassword() string {
|
||||
if x != nil {
|
||||
return x.Password
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type RegisterDefaultResp struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultResp) Reset() {
|
||||
*x = RegisterDefaultResp{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_auth_proto_msgTypes[3]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultResp) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*RegisterDefaultResp) ProtoMessage() {}
|
||||
|
||||
func (x *RegisterDefaultResp) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_auth_proto_msgTypes[3]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use RegisterDefaultResp.ProtoReflect.Descriptor instead.
|
||||
func (*RegisterDefaultResp) Descriptor() ([]byte, []int) {
|
||||
return file_auth_proto_rawDescGZIP(), []int{3}
|
||||
}
|
||||
|
||||
type RefreshAccessTokenReq struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
}
|
||||
|
||||
func (x *RefreshAccessTokenReq) Reset() {
|
||||
*x = RefreshAccessTokenReq{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_auth_proto_msgTypes[4]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *RefreshAccessTokenReq) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*RefreshAccessTokenReq) ProtoMessage() {}
|
||||
|
||||
func (x *RefreshAccessTokenReq) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_auth_proto_msgTypes[4]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use RefreshAccessTokenReq.ProtoReflect.Descriptor instead.
|
||||
func (*RefreshAccessTokenReq) Descriptor() ([]byte, []int) {
|
||||
return file_auth_proto_rawDescGZIP(), []int{4}
|
||||
}
|
||||
|
||||
type RefreshAccessTokenResp struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
AccessToken string `protobuf:"bytes,1,opt,name=accessToken,proto3" form:"accessToken" json:"accessToken" query:"accessToken"`
|
||||
}
|
||||
|
||||
func (x *RefreshAccessTokenResp) Reset() {
|
||||
*x = RefreshAccessTokenResp{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_auth_proto_msgTypes[5]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *RefreshAccessTokenResp) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*RefreshAccessTokenResp) ProtoMessage() {}
|
||||
|
||||
func (x *RefreshAccessTokenResp) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_auth_proto_msgTypes[5]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use RefreshAccessTokenResp.ProtoReflect.Descriptor instead.
|
||||
func (*RefreshAccessTokenResp) Descriptor() ([]byte, []int) {
|
||||
return file_auth_proto_rawDescGZIP(), []int{5}
|
||||
}
|
||||
|
||||
func (x *RefreshAccessTokenResp) GetAccessToken() string {
|
||||
if x != nil {
|
||||
return x.AccessToken
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
var File_auth_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_auth_proto_rawDesc = []byte{
|
||||
0x0a, 0x0a, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x61, 0x75,
|
||||
0x74, 0x68, 0x1a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x74, 0x0a,
|
||||
0x0f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71,
|
||||
0x12, 0x2e, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28,
|
||||
0x09, 0x42, 0x14, 0xca, 0xbb, 0x18, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xda, 0xbb,
|
||||
0x18, 0x05, 0x24, 0x21, 0x3d, 0x27, 0x27, 0x52, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74,
|
||||
0x12, 0x31, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x09, 0x42, 0x15, 0xca, 0xbb, 0x18, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64,
|
||||
0xda, 0xbb, 0x18, 0x05, 0x24, 0x21, 0x3d, 0x27, 0x27, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77,
|
||||
0x6f, 0x72, 0x64, 0x22, 0xae, 0x01, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65, 0x66,
|
||||
0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65,
|
||||
0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x22,
|
||||
0x0a, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x02,
|
||||
0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b,
|
||||
0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01,
|
||||
0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75, 0x73,
|
||||
0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73,
|
||||
0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x6f, 0x18,
|
||||
0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x6f, 0x12, 0x16, 0x0a, 0x06,
|
||||
0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x67, 0x65,
|
||||
0x6e, 0x64, 0x65, 0x72, 0x22, 0x77, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
|
||||
0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x12, 0x2e, 0x0a, 0x07, 0x41, 0x63,
|
||||
0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xca, 0xbb, 0x18,
|
||||
0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xda, 0xbb, 0x18, 0x05, 0x24, 0x21, 0x3d, 0x27,
|
||||
0x27, 0x52, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x50, 0x61,
|
||||
0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x15, 0xca, 0xbb,
|
||||
0x18, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0xda, 0xbb, 0x18, 0x05, 0x24, 0x21,
|
||||
0x3d, 0x27, 0x27, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x15, 0x0a,
|
||||
0x13, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
|
||||
0x52, 0x65, 0x73, 0x70, 0x22, 0x17, 0x0a, 0x15, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41,
|
||||
0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x22, 0x3a, 0x0a,
|
||||
0x16, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f,
|
||||
0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x12, 0x20, 0x0a, 0x0b, 0x61, 0x63, 0x63, 0x65, 0x73,
|
||||
0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x61, 0x63,
|
||||
0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x32, 0x66, 0x0a, 0x0c, 0x4c, 0x6f, 0x67,
|
||||
0x69, 0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x56, 0x0a, 0x0c, 0x4c, 0x6f, 0x67,
|
||||
0x69, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68,
|
||||
0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71,
|
||||
0x1a, 0x16, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65, 0x66,
|
||||
0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x17, 0xd2, 0xc1, 0x18, 0x13, 0x2f, 0x61,
|
||||
0x75, 0x74, 0x68, 0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c,
|
||||
0x74, 0x32, 0x75, 0x0a, 0x0f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x0f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
|
||||
0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x52,
|
||||
0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65,
|
||||
0x71, 0x1a, 0x19, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
|
||||
0x72, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x1a, 0xd2, 0xc1,
|
||||
0x18, 0x16, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
|
||||
0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x32, 0x77, 0x0a, 0x0c, 0x54, 0x6f, 0x6b, 0x65,
|
||||
0x6e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x67, 0x0a, 0x12, 0x52, 0x65, 0x66, 0x72,
|
||||
0x65, 0x73, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x1b,
|
||||
0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, 0x63, 0x63,
|
||||
0x65, 0x73, 0x73, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x71, 0x1a, 0x1c, 0x2e, 0x61, 0x75,
|
||||
0x74, 0x68, 0x2e, 0x52, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73,
|
||||
0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x22, 0x16, 0xd2, 0xc1, 0x18, 0x12, 0x2f,
|
||||
0x61, 0x75, 0x74, 0x68, 0x2f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65,
|
||||
0x6e, 0x42, 0x21, 0x5a, 0x1f, 0x63, 0x6e, 0x2f, 0x6f, 0x6e, 0x65, 0x61, 0x6f, 0x2f, 0x62, 0x61,
|
||||
0x73, 0x65, 0x2d, 0x67, 0x6f, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f,
|
||||
0x61, 0x75, 0x74, 0x68, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
file_auth_proto_rawDescOnce sync.Once
|
||||
file_auth_proto_rawDescData = file_auth_proto_rawDesc
|
||||
)
|
||||
|
||||
func file_auth_proto_rawDescGZIP() []byte {
|
||||
file_auth_proto_rawDescOnce.Do(func() {
|
||||
file_auth_proto_rawDescData = protoimpl.X.CompressGZIP(file_auth_proto_rawDescData)
|
||||
})
|
||||
return file_auth_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_auth_proto_msgTypes = make([]protoimpl.MessageInfo, 6)
|
||||
var file_auth_proto_goTypes = []interface{}{
|
||||
(*LoginDefaultReq)(nil), // 0: auth.LoginDefaultReq
|
||||
(*LoginDefaultResp)(nil), // 1: auth.LoginDefaultResp
|
||||
(*RegisterDefaultReq)(nil), // 2: auth.RegisterDefaultReq
|
||||
(*RegisterDefaultResp)(nil), // 3: auth.RegisterDefaultResp
|
||||
(*RefreshAccessTokenReq)(nil), // 4: auth.RefreshAccessTokenReq
|
||||
(*RefreshAccessTokenResp)(nil), // 5: auth.RefreshAccessTokenResp
|
||||
}
|
||||
var file_auth_proto_depIdxs = []int32{
|
||||
0, // 0: auth.LoginService.LoginDefault:input_type -> auth.LoginDefaultReq
|
||||
2, // 1: auth.RegisterService.RegisterDefault:input_type -> auth.RegisterDefaultReq
|
||||
4, // 2: auth.TokenService.RefreshAccessToken:input_type -> auth.RefreshAccessTokenReq
|
||||
1, // 3: auth.LoginService.LoginDefault:output_type -> auth.LoginDefaultResp
|
||||
3, // 4: auth.RegisterService.RegisterDefault:output_type -> auth.RegisterDefaultResp
|
||||
5, // 5: auth.TokenService.RefreshAccessToken:output_type -> auth.RefreshAccessTokenResp
|
||||
3, // [3:6] is the sub-list for method output_type
|
||||
0, // [0:3] is the sub-list for method input_type
|
||||
0, // [0:0] is the sub-list for extension type_name
|
||||
0, // [0:0] is the sub-list for extension extendee
|
||||
0, // [0:0] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_auth_proto_init() }
|
||||
func file_auth_proto_init() {
|
||||
if File_auth_proto != nil {
|
||||
return
|
||||
}
|
||||
if !protoimpl.UnsafeEnabled {
|
||||
file_auth_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*LoginDefaultReq); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_auth_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*LoginDefaultResp); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_auth_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*RegisterDefaultReq); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_auth_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*RegisterDefaultResp); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_auth_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*RefreshAccessTokenReq); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_auth_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*RefreshAccessTokenResp); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_auth_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 6,
|
||||
NumExtensions: 0,
|
||||
NumServices: 3,
|
||||
},
|
||||
GoTypes: file_auth_proto_goTypes,
|
||||
DependencyIndexes: file_auth_proto_depIdxs,
|
||||
MessageInfos: file_auth_proto_msgTypes,
|
||||
}.Build()
|
||||
File_auth_proto = out.File
|
||||
file_auth_proto_rawDesc = nil
|
||||
file_auth_proto_goTypes = nil
|
||||
file_auth_proto_depIdxs = nil
|
||||
}
|
||||
@@ -1,277 +0,0 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.28.0
|
||||
// protoc v6.33.1
|
||||
// source: login.proto
|
||||
|
||||
package login
|
||||
|
||||
import (
|
||||
_ "cn/oneao/base-go/biz/model/api"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type LoginDefaultReq struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Account string `protobuf:"bytes,1,opt,name=Account,proto3" form:"account" json:"account" vd:"$!=''"`
|
||||
Password string `protobuf:"bytes,2,opt,name=Password,proto3" form:"password" json:"password" vd:"$!=''"`
|
||||
}
|
||||
|
||||
func (x *LoginDefaultReq) Reset() {
|
||||
*x = LoginDefaultReq{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_login_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *LoginDefaultReq) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*LoginDefaultReq) ProtoMessage() {}
|
||||
|
||||
func (x *LoginDefaultReq) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_login_proto_msgTypes[0]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use LoginDefaultReq.ProtoReflect.Descriptor instead.
|
||||
func (*LoginDefaultReq) Descriptor() ([]byte, []int) {
|
||||
return file_login_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (x *LoginDefaultReq) GetAccount() string {
|
||||
if x != nil {
|
||||
return x.Account
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *LoginDefaultReq) GetPassword() string {
|
||||
if x != nil {
|
||||
return x.Password
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type LoginDefaultResp struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Token string `protobuf:"bytes,1,opt,name=token,proto3" form:"token" json:"token" query:"token"`
|
||||
RefreshToken string `protobuf:"bytes,2,opt,name=refreshToken,proto3" form:"refreshToken" json:"refreshToken" query:"refreshToken"`
|
||||
UserId int64 `protobuf:"varint,3,opt,name=userId,proto3" form:"userId" json:"userId" query:"userId"`
|
||||
Username string `protobuf:"bytes,4,opt,name=username,proto3" form:"username" json:"username" query:"username"`
|
||||
SeqNo int64 `protobuf:"varint,5,opt,name=seqNo,proto3" form:"seqNo" json:"seqNo" query:"seqNo"`
|
||||
Gender int64 `protobuf:"varint,6,opt,name=gender,proto3" form:"gender" json:"gender" query:"gender"`
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) Reset() {
|
||||
*x = LoginDefaultResp{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_login_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*LoginDefaultResp) ProtoMessage() {}
|
||||
|
||||
func (x *LoginDefaultResp) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_login_proto_msgTypes[1]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use LoginDefaultResp.ProtoReflect.Descriptor instead.
|
||||
func (*LoginDefaultResp) Descriptor() ([]byte, []int) {
|
||||
return file_login_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetToken() string {
|
||||
if x != nil {
|
||||
return x.Token
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetRefreshToken() string {
|
||||
if x != nil {
|
||||
return x.RefreshToken
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetUserId() int64 {
|
||||
if x != nil {
|
||||
return x.UserId
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetUsername() string {
|
||||
if x != nil {
|
||||
return x.Username
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetSeqNo() int64 {
|
||||
if x != nil {
|
||||
return x.SeqNo
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *LoginDefaultResp) GetGender() int64 {
|
||||
if x != nil {
|
||||
return x.Gender
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
var File_login_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_login_proto_rawDesc = []byte{
|
||||
0x0a, 0x0b, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x04, 0x61,
|
||||
0x75, 0x74, 0x68, 0x1a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x74,
|
||||
0x0a, 0x0f, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65,
|
||||
0x71, 0x12, 0x2e, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01,
|
||||
0x28, 0x09, 0x42, 0x14, 0xca, 0xbb, 0x18, 0x07, 0x61, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0xda,
|
||||
0xbb, 0x18, 0x05, 0x24, 0x21, 0x3d, 0x27, 0x27, 0x52, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e,
|
||||
0x74, 0x12, 0x31, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x18, 0x02, 0x20,
|
||||
0x01, 0x28, 0x09, 0x42, 0x15, 0xca, 0xbb, 0x18, 0x08, 0x70, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72,
|
||||
0x64, 0xda, 0xbb, 0x18, 0x05, 0x24, 0x21, 0x3d, 0x27, 0x27, 0x52, 0x08, 0x50, 0x61, 0x73, 0x73,
|
||||
0x77, 0x6f, 0x72, 0x64, 0x22, 0xae, 0x01, 0x0a, 0x10, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65,
|
||||
0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b,
|
||||
0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12,
|
||||
0x22, 0x0a, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x18,
|
||||
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x54, 0x6f,
|
||||
0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20,
|
||||
0x01, 0x28, 0x03, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x75,
|
||||
0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75,
|
||||
0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x6f,
|
||||
0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x73, 0x65, 0x71, 0x4e, 0x6f, 0x12, 0x16, 0x0a,
|
||||
0x06, 0x67, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x06, 0x67,
|
||||
0x65, 0x6e, 0x64, 0x65, 0x72, 0x32, 0x66, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x53, 0x65,
|
||||
0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x56, 0x0a, 0x0c, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65,
|
||||
0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x15, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x4c, 0x6f, 0x67,
|
||||
0x69, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x1a, 0x16, 0x2e, 0x61,
|
||||
0x75, 0x74, 0x68, 0x2e, 0x4c, 0x6f, 0x67, 0x69, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74,
|
||||
0x52, 0x65, 0x73, 0x70, 0x22, 0x17, 0xd2, 0xc1, 0x18, 0x13, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f,
|
||||
0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x27, 0x5a,
|
||||
0x25, 0x63, 0x6e, 0x2f, 0x6f, 0x6e, 0x65, 0x61, 0x6f, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2d, 0x67,
|
||||
0x6f, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x61, 0x75, 0x74, 0x68,
|
||||
0x2f, 0x6c, 0x6f, 0x67, 0x69, 0x6e, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
file_login_proto_rawDescOnce sync.Once
|
||||
file_login_proto_rawDescData = file_login_proto_rawDesc
|
||||
)
|
||||
|
||||
func file_login_proto_rawDescGZIP() []byte {
|
||||
file_login_proto_rawDescOnce.Do(func() {
|
||||
file_login_proto_rawDescData = protoimpl.X.CompressGZIP(file_login_proto_rawDescData)
|
||||
})
|
||||
return file_login_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_login_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
|
||||
var file_login_proto_goTypes = []interface{}{
|
||||
(*LoginDefaultReq)(nil), // 0: auth.LoginDefaultReq
|
||||
(*LoginDefaultResp)(nil), // 1: auth.LoginDefaultResp
|
||||
}
|
||||
var file_login_proto_depIdxs = []int32{
|
||||
0, // 0: auth.LoginService.LoginDefault:input_type -> auth.LoginDefaultReq
|
||||
1, // 1: auth.LoginService.LoginDefault:output_type -> auth.LoginDefaultResp
|
||||
1, // [1:2] is the sub-list for method output_type
|
||||
0, // [0:1] is the sub-list for method input_type
|
||||
0, // [0:0] is the sub-list for extension type_name
|
||||
0, // [0:0] is the sub-list for extension extendee
|
||||
0, // [0:0] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_login_proto_init() }
|
||||
func file_login_proto_init() {
|
||||
if File_login_proto != nil {
|
||||
return
|
||||
}
|
||||
if !protoimpl.UnsafeEnabled {
|
||||
file_login_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*LoginDefaultReq); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_login_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*LoginDefaultResp); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_login_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 2,
|
||||
NumExtensions: 0,
|
||||
NumServices: 1,
|
||||
},
|
||||
GoTypes: file_login_proto_goTypes,
|
||||
DependencyIndexes: file_login_proto_depIdxs,
|
||||
MessageInfos: file_login_proto_msgTypes,
|
||||
}.Build()
|
||||
File_login_proto = out.File
|
||||
file_login_proto_rawDesc = nil
|
||||
file_login_proto_goTypes = nil
|
||||
file_login_proto_depIdxs = nil
|
||||
}
|
||||
@@ -1,220 +0,0 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.28.0
|
||||
// protoc v6.33.1
|
||||
// source: register.proto
|
||||
|
||||
package register
|
||||
|
||||
import (
|
||||
_ "cn/oneao/base-go/biz/model/api"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type RegisterDefaultReq struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Account string `protobuf:"bytes,1,opt,name=Account,proto3" form:"account" json:"account" vd:"$!=''"`
|
||||
Password string `protobuf:"bytes,2,opt,name=Password,proto3" form:"password" json:"password" vd:"$!=''"`
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultReq) Reset() {
|
||||
*x = RegisterDefaultReq{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_register_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultReq) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*RegisterDefaultReq) ProtoMessage() {}
|
||||
|
||||
func (x *RegisterDefaultReq) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_register_proto_msgTypes[0]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use RegisterDefaultReq.ProtoReflect.Descriptor instead.
|
||||
func (*RegisterDefaultReq) Descriptor() ([]byte, []int) {
|
||||
return file_register_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultReq) GetAccount() string {
|
||||
if x != nil {
|
||||
return x.Account
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultReq) GetPassword() string {
|
||||
if x != nil {
|
||||
return x.Password
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type RegisterDefaultResp struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultResp) Reset() {
|
||||
*x = RegisterDefaultResp{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_register_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *RegisterDefaultResp) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*RegisterDefaultResp) ProtoMessage() {}
|
||||
|
||||
func (x *RegisterDefaultResp) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_register_proto_msgTypes[1]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use RegisterDefaultResp.ProtoReflect.Descriptor instead.
|
||||
func (*RegisterDefaultResp) Descriptor() ([]byte, []int) {
|
||||
return file_register_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
var File_register_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_register_proto_rawDesc = []byte{
|
||||
0x0a, 0x0e, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
|
||||
0x12, 0x04, 0x61, 0x75, 0x74, 0x68, 0x1a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x22, 0x77, 0x0a, 0x12, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x66,
|
||||
0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x71, 0x12, 0x2e, 0x0a, 0x07, 0x41, 0x63, 0x63, 0x6f, 0x75,
|
||||
0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x14, 0xca, 0xbb, 0x18, 0x07, 0x61, 0x63,
|
||||
0x63, 0x6f, 0x75, 0x6e, 0x74, 0xda, 0xbb, 0x18, 0x05, 0x24, 0x21, 0x3d, 0x27, 0x27, 0x52, 0x07,
|
||||
0x41, 0x63, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x31, 0x0a, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77,
|
||||
0x6f, 0x72, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x42, 0x15, 0xca, 0xbb, 0x18, 0x08, 0x70,
|
||||
0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0xda, 0xbb, 0x18, 0x05, 0x24, 0x21, 0x3d, 0x27, 0x27,
|
||||
0x52, 0x08, 0x50, 0x61, 0x73, 0x73, 0x77, 0x6f, 0x72, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x52, 0x65,
|
||||
0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73,
|
||||
0x70, 0x32, 0x75, 0x0a, 0x0f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x53, 0x65, 0x72,
|
||||
0x76, 0x69, 0x63, 0x65, 0x12, 0x62, 0x0a, 0x0f, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
|
||||
0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x18, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x52,
|
||||
0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65,
|
||||
0x71, 0x1a, 0x19, 0x2e, 0x61, 0x75, 0x74, 0x68, 0x2e, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65,
|
||||
0x72, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x65, 0x73, 0x70, 0x22, 0x1a, 0xd2, 0xc1,
|
||||
0x18, 0x16, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72,
|
||||
0x2f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x42, 0x2a, 0x5a, 0x28, 0x63, 0x6e, 0x2f, 0x6f,
|
||||
0x6e, 0x65, 0x61, 0x6f, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2d, 0x67, 0x6f, 0x2f, 0x62, 0x69, 0x7a,
|
||||
0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c, 0x2f, 0x61, 0x75, 0x74, 0x68, 0x2f, 0x72, 0x65, 0x67, 0x69,
|
||||
0x73, 0x74, 0x65, 0x72, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
file_register_proto_rawDescOnce sync.Once
|
||||
file_register_proto_rawDescData = file_register_proto_rawDesc
|
||||
)
|
||||
|
||||
func file_register_proto_rawDescGZIP() []byte {
|
||||
file_register_proto_rawDescOnce.Do(func() {
|
||||
file_register_proto_rawDescData = protoimpl.X.CompressGZIP(file_register_proto_rawDescData)
|
||||
})
|
||||
return file_register_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_register_proto_msgTypes = make([]protoimpl.MessageInfo, 2)
|
||||
var file_register_proto_goTypes = []interface{}{
|
||||
(*RegisterDefaultReq)(nil), // 0: auth.RegisterDefaultReq
|
||||
(*RegisterDefaultResp)(nil), // 1: auth.RegisterDefaultResp
|
||||
}
|
||||
var file_register_proto_depIdxs = []int32{
|
||||
0, // 0: auth.RegisterService.RegisterDefault:input_type -> auth.RegisterDefaultReq
|
||||
1, // 1: auth.RegisterService.RegisterDefault:output_type -> auth.RegisterDefaultResp
|
||||
1, // [1:2] is the sub-list for method output_type
|
||||
0, // [0:1] is the sub-list for method input_type
|
||||
0, // [0:0] is the sub-list for extension type_name
|
||||
0, // [0:0] is the sub-list for extension extendee
|
||||
0, // [0:0] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_register_proto_init() }
|
||||
func file_register_proto_init() {
|
||||
if File_register_proto != nil {
|
||||
return
|
||||
}
|
||||
if !protoimpl.UnsafeEnabled {
|
||||
file_register_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*RegisterDefaultReq); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_register_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*RegisterDefaultResp); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_register_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 2,
|
||||
NumExtensions: 0,
|
||||
NumServices: 1,
|
||||
},
|
||||
GoTypes: file_register_proto_goTypes,
|
||||
DependencyIndexes: file_register_proto_depIdxs,
|
||||
MessageInfos: file_register_proto_msgTypes,
|
||||
}.Build()
|
||||
File_register_proto = out.File
|
||||
file_register_proto_rawDesc = nil
|
||||
file_register_proto_goTypes = nil
|
||||
file_register_proto_depIdxs = nil
|
||||
}
|
||||
@@ -0,0 +1,316 @@
|
||||
// Code generated by protoc-gen-go. DO NOT EDIT.
|
||||
// versions:
|
||||
// protoc-gen-go v1.28.0
|
||||
// protoc v4.25.3
|
||||
// source: money_category.proto
|
||||
|
||||
package money_category
|
||||
|
||||
import (
|
||||
_ "cn/oneao/base-go/biz/model/api"
|
||||
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
|
||||
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
|
||||
reflect "reflect"
|
||||
sync "sync"
|
||||
)
|
||||
|
||||
const (
|
||||
// Verify that this generated code is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
|
||||
// Verify that runtime/protoimpl is sufficiently up-to-date.
|
||||
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
|
||||
)
|
||||
|
||||
type QueryUserMoneyCategoryReq struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
}
|
||||
|
||||
func (x *QueryUserMoneyCategoryReq) Reset() {
|
||||
*x = QueryUserMoneyCategoryReq{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_money_category_proto_msgTypes[0]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *QueryUserMoneyCategoryReq) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*QueryUserMoneyCategoryReq) ProtoMessage() {}
|
||||
|
||||
func (x *QueryUserMoneyCategoryReq) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_money_category_proto_msgTypes[0]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use QueryUserMoneyCategoryReq.ProtoReflect.Descriptor instead.
|
||||
func (*QueryUserMoneyCategoryReq) Descriptor() ([]byte, []int) {
|
||||
return file_money_category_proto_rawDescGZIP(), []int{0}
|
||||
}
|
||||
|
||||
type UserMoneyCategory struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Id int64 `protobuf:"varint,1,opt,name=id,proto3" form:"id" json:"id" query:"id"`
|
||||
Name string `protobuf:"bytes,2,opt,name=name,proto3" form:"name" json:"name" query:"name"`
|
||||
Icon string `protobuf:"bytes,3,opt,name=icon,proto3" form:"icon" json:"icon" query:"icon"`
|
||||
Type int32 `protobuf:"varint,4,opt,name=type,proto3" form:"type" json:"type" query:"type"`
|
||||
SortNumber int32 `protobuf:"varint,5,opt,name=sort_number,json=sortNumber,proto3" form:"sort_number" json:"sort_number" query:"sort_number"`
|
||||
}
|
||||
|
||||
func (x *UserMoneyCategory) Reset() {
|
||||
*x = UserMoneyCategory{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_money_category_proto_msgTypes[1]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *UserMoneyCategory) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*UserMoneyCategory) ProtoMessage() {}
|
||||
|
||||
func (x *UserMoneyCategory) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_money_category_proto_msgTypes[1]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use UserMoneyCategory.ProtoReflect.Descriptor instead.
|
||||
func (*UserMoneyCategory) Descriptor() ([]byte, []int) {
|
||||
return file_money_category_proto_rawDescGZIP(), []int{1}
|
||||
}
|
||||
|
||||
func (x *UserMoneyCategory) GetId() int64 {
|
||||
if x != nil {
|
||||
return x.Id
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *UserMoneyCategory) GetName() string {
|
||||
if x != nil {
|
||||
return x.Name
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *UserMoneyCategory) GetIcon() string {
|
||||
if x != nil {
|
||||
return x.Icon
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (x *UserMoneyCategory) GetType() int32 {
|
||||
if x != nil {
|
||||
return x.Type
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
func (x *UserMoneyCategory) GetSortNumber() int32 {
|
||||
if x != nil {
|
||||
return x.SortNumber
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
type QueryUserMoneyCategoryResp struct {
|
||||
state protoimpl.MessageState
|
||||
sizeCache protoimpl.SizeCache
|
||||
unknownFields protoimpl.UnknownFields
|
||||
|
||||
Categories []*UserMoneyCategory `protobuf:"bytes,1,rep,name=categories,proto3" form:"categories" json:"categories" query:"categories"`
|
||||
}
|
||||
|
||||
func (x *QueryUserMoneyCategoryResp) Reset() {
|
||||
*x = QueryUserMoneyCategoryResp{}
|
||||
if protoimpl.UnsafeEnabled {
|
||||
mi := &file_money_category_proto_msgTypes[2]
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
}
|
||||
|
||||
func (x *QueryUserMoneyCategoryResp) String() string {
|
||||
return protoimpl.X.MessageStringOf(x)
|
||||
}
|
||||
|
||||
func (*QueryUserMoneyCategoryResp) ProtoMessage() {}
|
||||
|
||||
func (x *QueryUserMoneyCategoryResp) ProtoReflect() protoreflect.Message {
|
||||
mi := &file_money_category_proto_msgTypes[2]
|
||||
if protoimpl.UnsafeEnabled && x != nil {
|
||||
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
|
||||
if ms.LoadMessageInfo() == nil {
|
||||
ms.StoreMessageInfo(mi)
|
||||
}
|
||||
return ms
|
||||
}
|
||||
return mi.MessageOf(x)
|
||||
}
|
||||
|
||||
// Deprecated: Use QueryUserMoneyCategoryResp.ProtoReflect.Descriptor instead.
|
||||
func (*QueryUserMoneyCategoryResp) Descriptor() ([]byte, []int) {
|
||||
return file_money_category_proto_rawDescGZIP(), []int{2}
|
||||
}
|
||||
|
||||
func (x *QueryUserMoneyCategoryResp) GetCategories() []*UserMoneyCategory {
|
||||
if x != nil {
|
||||
return x.Categories
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var File_money_category_proto protoreflect.FileDescriptor
|
||||
|
||||
var file_money_category_proto_rawDesc = []byte{
|
||||
0x0a, 0x14, 0x6d, 0x6f, 0x6e, 0x65, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79,
|
||||
0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0e, 0x6d, 0x6f, 0x6e, 0x65, 0x79, 0x5f, 0x63, 0x61,
|
||||
0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x1a, 0x09, 0x61, 0x70, 0x69, 0x2e, 0x70, 0x72, 0x6f, 0x74,
|
||||
0x6f, 0x22, 0x1b, 0x0a, 0x19, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f,
|
||||
0x6e, 0x65, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x71, 0x22, 0x80,
|
||||
0x01, 0x0a, 0x11, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x43, 0x61, 0x74, 0x65,
|
||||
0x67, 0x6f, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03,
|
||||
0x52, 0x02, 0x69, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
|
||||
0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x69, 0x63, 0x6f, 0x6e,
|
||||
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x69, 0x63, 0x6f, 0x6e, 0x12, 0x12, 0x0a, 0x04,
|
||||
0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65,
|
||||
0x12, 0x1f, 0x0a, 0x0b, 0x73, 0x6f, 0x72, 0x74, 0x5f, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18,
|
||||
0x05, 0x20, 0x01, 0x28, 0x05, 0x52, 0x0a, 0x73, 0x6f, 0x72, 0x74, 0x4e, 0x75, 0x6d, 0x62, 0x65,
|
||||
0x72, 0x22, 0x5f, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f,
|
||||
0x6e, 0x65, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x12,
|
||||
0x41, 0x0a, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69, 0x65, 0x73, 0x18, 0x01, 0x20,
|
||||
0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x6d, 0x6f, 0x6e, 0x65, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65,
|
||||
0x67, 0x6f, 0x72, 0x79, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x43, 0x61,
|
||||
0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x0a, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x69,
|
||||
0x65, 0x73, 0x32, 0x9d, 0x01, 0x0a, 0x14, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x43, 0x61, 0x74, 0x65,
|
||||
0x67, 0x6f, 0x72, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x84, 0x01, 0x0a, 0x16,
|
||||
0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x43, 0x61,
|
||||
0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x12, 0x29, 0x2e, 0x6d, 0x6f, 0x6e, 0x65, 0x79, 0x5f, 0x63,
|
||||
0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x73, 0x65,
|
||||
0x72, 0x4d, 0x6f, 0x6e, 0x65, 0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65,
|
||||
0x71, 0x1a, 0x2a, 0x2e, 0x6d, 0x6f, 0x6e, 0x65, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f,
|
||||
0x72, 0x79, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x73, 0x65, 0x72, 0x4d, 0x6f, 0x6e, 0x65,
|
||||
0x79, 0x43, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x52, 0x65, 0x73, 0x70, 0x22, 0x13, 0xca,
|
||||
0xc1, 0x18, 0x0f, 0x2f, 0x6d, 0x6f, 0x6e, 0x65, 0x79, 0x2f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f,
|
||||
0x72, 0x79, 0x42, 0x2b, 0x5a, 0x29, 0x63, 0x6e, 0x2f, 0x6f, 0x6e, 0x65, 0x61, 0x6f, 0x2f, 0x62,
|
||||
0x61, 0x73, 0x65, 0x2d, 0x67, 0x6f, 0x2f, 0x62, 0x69, 0x7a, 0x2f, 0x6d, 0x6f, 0x64, 0x65, 0x6c,
|
||||
0x2f, 0x6d, 0x6f, 0x6e, 0x65, 0x79, 0x5f, 0x63, 0x61, 0x74, 0x65, 0x67, 0x6f, 0x72, 0x79, 0x62,
|
||||
0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
|
||||
}
|
||||
|
||||
var (
|
||||
file_money_category_proto_rawDescOnce sync.Once
|
||||
file_money_category_proto_rawDescData = file_money_category_proto_rawDesc
|
||||
)
|
||||
|
||||
func file_money_category_proto_rawDescGZIP() []byte {
|
||||
file_money_category_proto_rawDescOnce.Do(func() {
|
||||
file_money_category_proto_rawDescData = protoimpl.X.CompressGZIP(file_money_category_proto_rawDescData)
|
||||
})
|
||||
return file_money_category_proto_rawDescData
|
||||
}
|
||||
|
||||
var file_money_category_proto_msgTypes = make([]protoimpl.MessageInfo, 3)
|
||||
var file_money_category_proto_goTypes = []interface{}{
|
||||
(*QueryUserMoneyCategoryReq)(nil), // 0: money_category.QueryUserMoneyCategoryReq
|
||||
(*UserMoneyCategory)(nil), // 1: money_category.UserMoneyCategory
|
||||
(*QueryUserMoneyCategoryResp)(nil), // 2: money_category.QueryUserMoneyCategoryResp
|
||||
}
|
||||
var file_money_category_proto_depIdxs = []int32{
|
||||
1, // 0: money_category.QueryUserMoneyCategoryResp.categories:type_name -> money_category.UserMoneyCategory
|
||||
0, // 1: money_category.MoneyCategoryService.QueryUserMoneyCategory:input_type -> money_category.QueryUserMoneyCategoryReq
|
||||
2, // 2: money_category.MoneyCategoryService.QueryUserMoneyCategory:output_type -> money_category.QueryUserMoneyCategoryResp
|
||||
2, // [2:3] is the sub-list for method output_type
|
||||
1, // [1:2] is the sub-list for method input_type
|
||||
1, // [1:1] is the sub-list for extension type_name
|
||||
1, // [1:1] is the sub-list for extension extendee
|
||||
0, // [0:1] is the sub-list for field type_name
|
||||
}
|
||||
|
||||
func init() { file_money_category_proto_init() }
|
||||
func file_money_category_proto_init() {
|
||||
if File_money_category_proto != nil {
|
||||
return
|
||||
}
|
||||
if !protoimpl.UnsafeEnabled {
|
||||
file_money_category_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*QueryUserMoneyCategoryReq); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_money_category_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*UserMoneyCategory); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
file_money_category_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
|
||||
switch v := v.(*QueryUserMoneyCategoryResp); i {
|
||||
case 0:
|
||||
return &v.state
|
||||
case 1:
|
||||
return &v.sizeCache
|
||||
case 2:
|
||||
return &v.unknownFields
|
||||
default:
|
||||
return nil
|
||||
}
|
||||
}
|
||||
}
|
||||
type x struct{}
|
||||
out := protoimpl.TypeBuilder{
|
||||
File: protoimpl.DescBuilder{
|
||||
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
|
||||
RawDescriptor: file_money_category_proto_rawDesc,
|
||||
NumEnums: 0,
|
||||
NumMessages: 3,
|
||||
NumExtensions: 0,
|
||||
NumServices: 1,
|
||||
},
|
||||
GoTypes: file_money_category_proto_goTypes,
|
||||
DependencyIndexes: file_money_category_proto_depIdxs,
|
||||
MessageInfos: file_money_category_proto_msgTypes,
|
||||
}.Build()
|
||||
File_money_category_proto = out.File
|
||||
file_money_category_proto_rawDesc = nil
|
||||
file_money_category_proto_goTypes = nil
|
||||
file_money_category_proto_depIdxs = nil
|
||||
}
|
||||
+8
-3
@@ -1,9 +1,9 @@
|
||||
// Code generated by hertz generator. DO NOT EDIT.
|
||||
|
||||
package register
|
||||
package auth
|
||||
|
||||
import (
|
||||
register "cn/oneao/base-go/biz/handler/register"
|
||||
auth "cn/oneao/base-go/biz/handler/auth"
|
||||
"github.com/cloudwego/hertz/pkg/app/server"
|
||||
)
|
||||
|
||||
@@ -19,9 +19,14 @@ func Register(r *server.Hertz) {
|
||||
root := r.Group("/", rootMw()...)
|
||||
{
|
||||
_auth := root.Group("/auth", _authMw()...)
|
||||
_auth.POST("/refreshToken", append(_refreshaccesstokenMw(), auth.RefreshAccessToken)...)
|
||||
{
|
||||
_login := _auth.Group("/login", _loginMw()...)
|
||||
_login.POST("/default", append(_logindefaultMw(), auth.LoginDefault)...)
|
||||
}
|
||||
{
|
||||
_register := _auth.Group("/register", _registerMw()...)
|
||||
_register.POST("/default", append(_registerdefaultMw(), register.RegisterDefault)...)
|
||||
_register.POST("/default", append(_registerdefaultMw(), auth.RegisterDefault)...)
|
||||
}
|
||||
}
|
||||
}
|
||||
+16
-1
@@ -1,6 +1,6 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package login
|
||||
package auth
|
||||
|
||||
import (
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
@@ -25,3 +25,18 @@ func _logindefaultMw() []app.HandlerFunc {
|
||||
// your code...
|
||||
return nil
|
||||
}
|
||||
|
||||
func _registerMw() []app.HandlerFunc {
|
||||
// your code...
|
||||
return nil
|
||||
}
|
||||
|
||||
func _registerdefaultMw() []app.HandlerFunc {
|
||||
// your code...
|
||||
return nil
|
||||
}
|
||||
|
||||
func _refreshaccesstokenMw() []app.HandlerFunc {
|
||||
// your code...
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,67 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"cn/oneao/base-go/utils/jwtx"
|
||||
"cn/oneao/base-go/utils/pathx"
|
||||
"cn/oneao/base-go/utils/response"
|
||||
"context"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
)
|
||||
|
||||
// 私有 key,防止冲突
|
||||
type ctxKeyUserID struct{}
|
||||
|
||||
// Auth 中间件,直接在中间件里过滤白名单路径
|
||||
func Auth() app.HandlerFunc {
|
||||
// 白名单路径,直接写死
|
||||
whitelistPaths := []string{
|
||||
"/auth/login",
|
||||
"/auth/register",
|
||||
"/auth/refreshToken",
|
||||
}
|
||||
|
||||
return func(ctx context.Context, c *app.RequestContext) {
|
||||
path := string(c.Request.URI().Path())
|
||||
|
||||
// 使用工具函数判断是否在白名单
|
||||
if pathx.MatchPath(path, whitelistPaths) {
|
||||
c.Next(ctx)
|
||||
return
|
||||
}
|
||||
|
||||
// 获取 token
|
||||
token := string(c.GetHeader("token"))
|
||||
if token == "" {
|
||||
response.Fail(c).Code(response.HttpCode.Unauthorized).Send()
|
||||
c.Abort()
|
||||
return
|
||||
}
|
||||
|
||||
verifyToken := jwtx.VerifyToken(token)
|
||||
|
||||
if verifyToken.IsValid {
|
||||
// 设置 userID 到 context
|
||||
ctx = setUserID(ctx, verifyToken.Claims.UserID)
|
||||
c.Next(ctx)
|
||||
return
|
||||
}
|
||||
|
||||
// token 无效
|
||||
response.Fail(c).Code(response.HttpCode.RefreshToken).Send()
|
||||
c.Abort()
|
||||
}
|
||||
}
|
||||
|
||||
// GetUserID 从 context 中获取 user_id
|
||||
func GetUserID(ctx context.Context) int64 {
|
||||
userID, ok := ctx.Value(ctxKeyUserID{}).(int64)
|
||||
if !ok {
|
||||
return 0 // 或者返回 error,根据业务需求
|
||||
}
|
||||
return userID
|
||||
}
|
||||
|
||||
// 内部中间件设置 user_id
|
||||
func setUserID(ctx context.Context, userID int64) context.Context {
|
||||
return context.WithValue(ctx, ctxKeyUserID{}, userID)
|
||||
}
|
||||
@@ -0,0 +1,100 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"cn/oneao/base-go/logx"
|
||||
"cn/oneao/base-go/utils/response"
|
||||
"context"
|
||||
"fmt"
|
||||
"go.uber.org/zap"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// ErrorInfo 封装错误信息和调用栈
|
||||
type ErrorInfo struct {
|
||||
Message string // 错误信息
|
||||
FuncName string // 出错函数
|
||||
File string // 文件路径
|
||||
Line string // 行号
|
||||
Stack string // 完整堆栈信息
|
||||
}
|
||||
|
||||
// Error 中间件
|
||||
func Error() app.HandlerFunc {
|
||||
return func(ctx context.Context, c *app.RequestContext) {
|
||||
c.Next(ctx)
|
||||
|
||||
if e := c.Errors.Last(); e != nil && e.Err != nil {
|
||||
info := ParseError(e.Err)
|
||||
|
||||
logx.CtxError(ctx, "系统异常",
|
||||
zap.String("Message", info.Message),
|
||||
zap.String("File", info.File),
|
||||
zap.String("Line", info.Line),
|
||||
zap.String("Func", info.FuncName),
|
||||
zap.String("Stack", info.Stack),
|
||||
)
|
||||
|
||||
// 返回给前端
|
||||
response.Fail(c).Message("系统异常,请联系管理员!").Send()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ParseError 解析 error 为 ErrorInfo
|
||||
func ParseError(err error) *ErrorInfo {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
info := &ErrorInfo{
|
||||
Message: err.Error(),
|
||||
Stack: string(debug.Stack()), // 默认 runtime stack
|
||||
}
|
||||
|
||||
// 尝试解析 pkg/errors stack
|
||||
type stackTracer interface {
|
||||
StackTrace() errors.StackTrace
|
||||
}
|
||||
|
||||
if errWithStack, ok := err.(stackTracer); ok {
|
||||
st := errWithStack.StackTrace()
|
||||
var funcName, fileLine string
|
||||
for _, f := range st {
|
||||
line := fmt.Sprintf("%+v", f)
|
||||
// 取 biz/ 目录下第一个函数作为业务函数
|
||||
if strings.Contains(line, "/biz/") {
|
||||
parts := strings.Split(line, "\n")
|
||||
if len(parts) >= 2 {
|
||||
funcName = strings.TrimSpace(parts[0])
|
||||
fileLine = strings.TrimSpace(parts[1])
|
||||
} else {
|
||||
funcName = strings.TrimSpace(line)
|
||||
fileLine = strings.TrimSpace(line)
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
info.FuncName = funcName
|
||||
// 分离文件和行号
|
||||
if idx := strings.LastIndex(fileLine, ":"); idx > 0 {
|
||||
info.File = fileLine[:idx]
|
||||
info.Line = fileLine[idx+1:]
|
||||
} else {
|
||||
info.File = fileLine
|
||||
info.Line = ""
|
||||
}
|
||||
|
||||
// 完整堆栈
|
||||
stackStr := ""
|
||||
for _, f := range st {
|
||||
stackStr += fmt.Sprintf("%+v\n", f)
|
||||
}
|
||||
info.Stack = stackStr
|
||||
}
|
||||
|
||||
return info
|
||||
}
|
||||
File renamed without changes.
File renamed without changes.
+4
-4
@@ -1,6 +1,6 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package register
|
||||
package money_category
|
||||
|
||||
import (
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
@@ -11,17 +11,17 @@ func rootMw() []app.HandlerFunc {
|
||||
return nil
|
||||
}
|
||||
|
||||
func _authMw() []app.HandlerFunc {
|
||||
func _moneyMw() []app.HandlerFunc {
|
||||
// your code...
|
||||
return nil
|
||||
}
|
||||
|
||||
func _registerMw() []app.HandlerFunc {
|
||||
func _categoryMw() []app.HandlerFunc {
|
||||
// your code...
|
||||
return nil
|
||||
}
|
||||
|
||||
func _registerdefaultMw() []app.HandlerFunc {
|
||||
func _queryusermoneycategoryMw() []app.HandlerFunc {
|
||||
// your code...
|
||||
return nil
|
||||
}
|
||||
+4
-7
@@ -1,9 +1,9 @@
|
||||
// Code generated by hertz generator. DO NOT EDIT.
|
||||
|
||||
package login
|
||||
package money_category
|
||||
|
||||
import (
|
||||
login "cn/oneao/base-go/biz/handler/login"
|
||||
money_category "cn/oneao/base-go/biz/handler/money_category"
|
||||
"github.com/cloudwego/hertz/pkg/app/server"
|
||||
)
|
||||
|
||||
@@ -18,10 +18,7 @@ func Register(r *server.Hertz) {
|
||||
|
||||
root := r.Group("/", rootMw()...)
|
||||
{
|
||||
_auth := root.Group("/auth", _authMw()...)
|
||||
{
|
||||
_login := _auth.Group("/login", _loginMw()...)
|
||||
_login.POST("/default", append(_logindefaultMw(), login.LoginDefault)...)
|
||||
}
|
||||
_money := root.Group("/money", _moneyMw()...)
|
||||
_money.GET("/category", append(_queryusermoneycategoryMw(), money_category.QueryUserMoneyCategory)...)
|
||||
}
|
||||
}
|
||||
@@ -3,15 +3,15 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
login "cn/oneao/base-go/biz/router/login"
|
||||
register "cn/oneao/base-go/biz/router/register"
|
||||
auth "cn/oneao/base-go/biz/router/auth"
|
||||
money_category "cn/oneao/base-go/biz/router/money_category"
|
||||
"github.com/cloudwego/hertz/pkg/app/server"
|
||||
)
|
||||
|
||||
// GeneratedRegister registers routers generated by IDL.
|
||||
func GeneratedRegister(r *server.Hertz) {
|
||||
//INSERT_POINT: DO NOT DELETE THIS LINE!
|
||||
register.Register(r)
|
||||
money_category.Register(r)
|
||||
|
||||
login.Register(r)
|
||||
auth.Register(r)
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
package conf
|
||||
|
||||
import (
|
||||
"github.com/spf13/viper"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sync"
|
||||
"time"
|
||||
)
|
||||
|
||||
var (
|
||||
conf *Config
|
||||
once sync.Once
|
||||
)
|
||||
|
||||
type Config struct {
|
||||
Env string
|
||||
|
||||
Server ServerConfig `mapstructure:"server" yaml:"server"`
|
||||
JWT JwtConfig `mapstructure:"jwt" yaml:"jwt"`
|
||||
Snowflake SnowflakeConfig `mapstructure:"snowflake" yaml:"snowflake"`
|
||||
Pgsql PgsqlConfig `mapstructure:"pgsql" yaml:"pgsql"`
|
||||
Log LogConfig `mapstructure:"log" yaml:"log"`
|
||||
}
|
||||
|
||||
type ServerConfig struct {
|
||||
Port string `mapstructure:"port" yaml:"port"`
|
||||
BaseUrl string `mapstructure:"base_url" yaml:"base_url"` // 下划线
|
||||
}
|
||||
|
||||
type JwtConfig struct {
|
||||
Secret string `mapstructure:"secret" yaml:"secret"`
|
||||
AccessExpiry time.Duration `mapstructure:"access_expiry" yaml:"access_expiry"`
|
||||
RefreshExpiry time.Duration `mapstructure:"refresh_expiry" yaml:"refresh_expiry"`
|
||||
}
|
||||
|
||||
type SnowflakeConfig struct {
|
||||
DatacenterID uint16 `mapstructure:"datacenter_id" yaml:"datacenter_id"`
|
||||
WorkerID uint16 `mapstructure:"worker_id" yaml:"worker_id"`
|
||||
}
|
||||
|
||||
type PgsqlConfig struct {
|
||||
Host string `mapstructure:"host" yaml:"host"`
|
||||
Port int `mapstructure:"port" yaml:"port"`
|
||||
User string `mapstructure:"user" yaml:"user"`
|
||||
Password string `mapstructure:"password" yaml:"password"`
|
||||
Dbname string `mapstructure:"dbname" yaml:"dbname"`
|
||||
SllMode bool `mapstructure:"sll_mode" yaml:"sll_mode"`
|
||||
TimeZone string `mapstructure:"timezone" yaml:"timezone"`
|
||||
MaxOpenConns int32 `mapstructure:"max_open_conns" yaml:"max_open_conns"`
|
||||
MaxIdleConns int32 `mapstructure:"max_idle_conns" yaml:"max_idle_conns"`
|
||||
ConnMaxLifetime time.Duration `mapstructure:"conn_max_lifetime" yaml:"conn_max_lifetime"`
|
||||
}
|
||||
|
||||
type LogConfig struct {
|
||||
Level string `mapstructure:"level" yaml:"level"`
|
||||
Dir string `mapstructure:"dir" yaml:"dir"`
|
||||
MaxSize int `mapstructure:"max_size" yaml:"max_size"`
|
||||
MaxBackups int `mapstructure:"max_backups" yaml:"max_backups"`
|
||||
MaxAge int `mapstructure:"max_age" yaml:"max_age"`
|
||||
Compress bool `mapstructure:"compress" yaml:"compress"`
|
||||
}
|
||||
|
||||
func GetConf() *Config {
|
||||
once.Do(initConf)
|
||||
return conf
|
||||
}
|
||||
|
||||
func initConf() {
|
||||
prefix := "conf"
|
||||
confFileRelPath := filepath.Join(prefix, filepath.Join(GetEnv(), "conf.yaml"))
|
||||
|
||||
v := viper.New()
|
||||
v.SetConfigFile(confFileRelPath)
|
||||
v.SetConfigType("yaml")
|
||||
|
||||
if err := v.ReadInConfig(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
conf = new(Config)
|
||||
if err := v.Unmarshal(conf); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
conf.Env = GetEnv()
|
||||
}
|
||||
|
||||
func GetEnv() string {
|
||||
e := os.Getenv("GO_ENV")
|
||||
if len(e) == 0 {
|
||||
return "dev"
|
||||
}
|
||||
return e
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
server:
|
||||
port: 8086
|
||||
base_url: /app
|
||||
|
||||
jwt:
|
||||
secret: 3Bde3BGEbYqtqyEUzW3ry8jKFcaPH17fRmTmqE7MDr05Lwj95uruRKrrkb44TJ4s
|
||||
access_expiry: 720h
|
||||
refresh_expiry: 720h
|
||||
|
||||
snowflake:
|
||||
datacenter_id: 1
|
||||
worker_id: 1
|
||||
|
||||
pgsql:
|
||||
host: 117.72.182.135
|
||||
port: 5432
|
||||
user: postgres
|
||||
password: zhang520..
|
||||
dbname: base
|
||||
timezone: Asia/Shanghai
|
||||
max_open_conns: 10
|
||||
max_idle_conns: 5
|
||||
conn_max_lifetime: 30m
|
||||
sll_mode: false
|
||||
|
||||
log:
|
||||
level: "debug"
|
||||
dir: "./logs"
|
||||
max_size: 10
|
||||
max_backups: 30
|
||||
max_age: 7
|
||||
compress: true
|
||||
@@ -1,43 +0,0 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type appConfig struct {
|
||||
Server serverConfig
|
||||
JWT jwtConfig
|
||||
Snowflake snowflakeConfig
|
||||
}
|
||||
|
||||
type serverConfig struct {
|
||||
Port string
|
||||
BaseUrl string
|
||||
}
|
||||
|
||||
type jwtConfig struct {
|
||||
Secret string
|
||||
AccessExpiry time.Duration
|
||||
RefreshExpiry time.Duration
|
||||
}
|
||||
|
||||
type snowflakeConfig struct {
|
||||
DatacenterID uint16
|
||||
WorkerID uint16
|
||||
}
|
||||
|
||||
var App = &appConfig{
|
||||
Server: serverConfig{
|
||||
Port: ":8086",
|
||||
BaseUrl: "/app",
|
||||
},
|
||||
JWT: jwtConfig{
|
||||
Secret: "3Bde3BGEbYqtqyEUzW3ry8jKFcaPH17fRmTmqE7MDr05Lwj95uruRKrrkb44TJ4s",
|
||||
AccessExpiry: 30 * time.Minute,
|
||||
RefreshExpiry: 30 * 24 * time.Hour,
|
||||
},
|
||||
Snowflake: snowflakeConfig{
|
||||
DatacenterID: 1,
|
||||
WorkerID: 1,
|
||||
},
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
package config
|
||||
|
||||
import (
|
||||
"time"
|
||||
)
|
||||
|
||||
type dbConfig struct {
|
||||
Host string
|
||||
Port int
|
||||
User string
|
||||
Password string
|
||||
Dbname string
|
||||
SllMode bool
|
||||
TimeZone string
|
||||
MaxOpenConns int
|
||||
MaxIdleConns int
|
||||
ConnMaxLifetime time.Duration
|
||||
}
|
||||
|
||||
// Db 默认值
|
||||
var Db = &dbConfig{
|
||||
Host: "117.72.182.135",
|
||||
Port: 5432,
|
||||
User: "postgres",
|
||||
Password: "zhang520..",
|
||||
Dbname: "base",
|
||||
SllMode: false,
|
||||
TimeZone: "Asia/Shanghai",
|
||||
MaxOpenConns: 10,
|
||||
MaxIdleConns: 5,
|
||||
ConnMaxLifetime: 30 * time.Minute,
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"cn/oneao/base-go/config"
|
||||
"cn/oneao/base-go/conf"
|
||||
sqlcg "cn/oneao/base-go/db/sqlc"
|
||||
"context"
|
||||
"fmt"
|
||||
@@ -11,19 +11,18 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
DB *pgxpool.Pool
|
||||
DBClient *sqlcg.Queries
|
||||
DB *pgxpool.Pool
|
||||
Queries *sqlcg.Queries
|
||||
)
|
||||
|
||||
func InitDB() error {
|
||||
cfg := config.Db
|
||||
func InitDB() {
|
||||
cfg := conf.GetConf().Pgsql
|
||||
|
||||
sslMode := "disable"
|
||||
if cfg.SllMode {
|
||||
sslMode = "require"
|
||||
}
|
||||
|
||||
// 构建 DSN
|
||||
dsn := fmt.Sprintf(
|
||||
"postgres://%s:%s@%s:%d/%s?sslmode=%s&TimeZone=%s",
|
||||
cfg.User, cfg.Password, cfg.Host, cfg.Port, cfg.Dbname, sslMode, cfg.TimeZone,
|
||||
@@ -32,25 +31,37 @@ func InitDB() error {
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
|
||||
pool, err := pgxpool.New(ctx, dsn)
|
||||
// 使用可修改配置
|
||||
cfgPool, err := pgxpool.ParseConfig(dsn)
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to connect to database: %w", err)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// 给连接池参数设置默认值
|
||||
if cfg.MaxOpenConns <= 0 {
|
||||
cfg.MaxOpenConns = 10
|
||||
}
|
||||
if cfg.MaxIdleConns <= 0 {
|
||||
cfg.MaxIdleConns = 5
|
||||
}
|
||||
if cfg.ConnMaxLifetime <= 0 {
|
||||
cfg.ConnMaxLifetime = 30 * time.Minute
|
||||
}
|
||||
|
||||
cfgPool.MaxConns = cfg.MaxOpenConns
|
||||
cfgPool.MinConns = cfg.MaxIdleConns
|
||||
cfgPool.MaxConnLifetime = cfg.ConnMaxLifetime
|
||||
|
||||
pool, err := pgxpool.NewWithConfig(ctx, cfgPool)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// 测试连接
|
||||
if err := pool.Ping(ctx); err != nil {
|
||||
return fmt.Errorf("ping database failed: %w", err)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
DB = pool
|
||||
|
||||
// 初始化 sqlc Queries,全局可用
|
||||
DBClient = sqlcg.New(DB)
|
||||
|
||||
// 可选:设置连接池参数
|
||||
pool.Config().MaxConns = int32(cfg.MaxOpenConns)
|
||||
pool.Config().MinConns = int32(cfg.MaxIdleConns)
|
||||
pool.Config().MaxConnLifetime = cfg.ConnMaxLifetime
|
||||
|
||||
return nil
|
||||
Queries = sqlcg.New(DB)
|
||||
}
|
||||
Whitespace-only changes.
@@ -0,0 +1,2 @@
|
||||
-- name: ListMoneySysCategory :many
|
||||
SELECT * FROM money_sys_category;
|
||||
@@ -0,0 +1,8 @@
|
||||
-- name: BatchInsertMoneyUserCategories :copyfrom
|
||||
INSERT INTO money_user_category (id, user_id, name, icon, type, sort_number)
|
||||
VALUES ($1, $2, $3, $4, $5, $6);
|
||||
|
||||
-- name: FindUserMoneyCategoriesByUserID :many
|
||||
SELECT *
|
||||
FROM money_user_category
|
||||
WHERE user_id = $1;
|
||||
@@ -1,23 +1,30 @@
|
||||
-- name: CreateUser :execrows
|
||||
-- 插入用户并返回刚创建的记录
|
||||
-- name: InsertUser :execrows
|
||||
INSERT INTO user_info (id, account, password)
|
||||
VALUES ($1, $2, $3);
|
||||
|
||||
-- name: GetUserById :one
|
||||
-- 根据 ID 查询单条用户记录
|
||||
-- name: GetUserById :one
|
||||
SELECT *
|
||||
FROM user_info
|
||||
WHERE id = $1;
|
||||
|
||||
-- name: GetUserByAccountAndPassword :one
|
||||
-- 根据账号查询单条用户记录
|
||||
-- name: GetUserByAccount :one
|
||||
SELECT *
|
||||
FROM user_info
|
||||
WHERE account = $1;
|
||||
|
||||
-- 根据账号和密码查询单条用户记录(登录用)
|
||||
-- name: GetUserForLogin :one
|
||||
SELECT *
|
||||
FROM user_info
|
||||
WHERE account = $1
|
||||
AND password = $2;
|
||||
|
||||
-- 更新用户最后登录时间,并返回更新后的记录
|
||||
-- name: UpdateUserLoginLastTime :execrows
|
||||
-- 更新用户最后登录时间,并返回影响的行数
|
||||
UPDATE user_info
|
||||
SET last_login_time = now()
|
||||
WHERE id = $1;
|
||||
|
||||
@@ -26,7 +26,7 @@ CREATE TABLE money_sys_category(
|
||||
id BIGINT PRIMARY KEY ,
|
||||
name VARCHAR(255) NOT NULL ,
|
||||
icon VARCHAR(255) NOT NULL,
|
||||
type SMALLINT DEFAULT 0,
|
||||
type INT DEFAULT 0,
|
||||
sort_number INT DEFAULT 0,
|
||||
create_time timestamp DEFAULT CURRENT_TIMESTAMP
|
||||
);
|
||||
@@ -36,7 +36,7 @@ CREATE TABLE money_user_category(
|
||||
user_id BIGINT NOT NULL,
|
||||
name VARCHAR(255) NOT NULL ,
|
||||
icon VARCHAR(255) NOT NULL,
|
||||
type SMALLINT DEFAULT 0,
|
||||
type INT DEFAULT 0,
|
||||
sort_number INT DEFAULT 0,
|
||||
create_time timestamp DEFAULT CURRENT_TIMESTAMP
|
||||
)
|
||||
@@ -0,0 +1,47 @@
|
||||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.30.0
|
||||
// source: copyfrom.go
|
||||
|
||||
package dbtype
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
// iteratorForBatchInsertMoneyUserCategories implements pgx.CopyFromSource.
|
||||
type iteratorForBatchInsertMoneyUserCategories struct {
|
||||
rows []BatchInsertMoneyUserCategoriesParams
|
||||
skippedFirstNextCall bool
|
||||
}
|
||||
|
||||
func (r *iteratorForBatchInsertMoneyUserCategories) Next() bool {
|
||||
if len(r.rows) == 0 {
|
||||
return false
|
||||
}
|
||||
if !r.skippedFirstNextCall {
|
||||
r.skippedFirstNextCall = true
|
||||
return true
|
||||
}
|
||||
r.rows = r.rows[1:]
|
||||
return len(r.rows) > 0
|
||||
}
|
||||
|
||||
func (r iteratorForBatchInsertMoneyUserCategories) Values() ([]interface{}, error) {
|
||||
return []interface{}{
|
||||
r.rows[0].ID,
|
||||
r.rows[0].UserID,
|
||||
r.rows[0].Name,
|
||||
r.rows[0].Icon,
|
||||
r.rows[0].Type,
|
||||
r.rows[0].SortNumber,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (r iteratorForBatchInsertMoneyUserCategories) Err() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (q *Queries) BatchInsertMoneyUserCategories(ctx context.Context, arg []BatchInsertMoneyUserCategoriesParams) (int64, error) {
|
||||
return q.db.CopyFrom(ctx, []string{"money_user_category"}, []string{"id", "user_id", "name", "icon", "type", "sort_number"}, &iteratorForBatchInsertMoneyUserCategories{rows: arg})
|
||||
}
|
||||
@@ -2,7 +2,7 @@
|
||||
// versions:
|
||||
// sqlc v1.30.0
|
||||
|
||||
package sqlcg
|
||||
package dbtype
|
||||
|
||||
import (
|
||||
"context"
|
||||
@@ -15,6 +15,7 @@ type DBTX interface {
|
||||
Exec(context.Context, string, ...interface{}) (pgconn.CommandTag, error)
|
||||
Query(context.Context, string, ...interface{}) (pgx.Rows, error)
|
||||
QueryRow(context.Context, string, ...interface{}) pgx.Row
|
||||
CopyFrom(ctx context.Context, tableName pgx.Identifier, columnNames []string, rowSrc pgx.CopyFromSource) (int64, error)
|
||||
}
|
||||
|
||||
func New(db DBTX) *Queries {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
// versions:
|
||||
// sqlc v1.30.0
|
||||
|
||||
package sqlcg
|
||||
package dbtype
|
||||
|
||||
import (
|
||||
"github.com/jackc/pgx/v5/pgtype"
|
||||
@@ -23,7 +23,7 @@ type MoneySysCategory struct {
|
||||
ID int64
|
||||
Name string
|
||||
Icon string
|
||||
Type pgtype.Int2
|
||||
Type pgtype.Int4
|
||||
SortNumber pgtype.Int4
|
||||
CreateTime pgtype.Timestamp
|
||||
}
|
||||
@@ -33,7 +33,7 @@ type MoneyUserCategory struct {
|
||||
UserID int64
|
||||
Name string
|
||||
Icon string
|
||||
Type pgtype.Int2
|
||||
Type pgtype.Int4
|
||||
SortNumber pgtype.Int4
|
||||
CreateTime pgtype.Timestamp
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.30.0
|
||||
// source: money_sys_category.sql
|
||||
|
||||
package dbtype
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
const listMoneySysCategory = `-- name: ListMoneySysCategory :many
|
||||
SELECT id, name, icon, type, sort_number, create_time FROM money_sys_category
|
||||
`
|
||||
|
||||
func (q *Queries) ListMoneySysCategory(ctx context.Context) ([]MoneySysCategory, error) {
|
||||
rows, err := q.db.Query(ctx, listMoneySysCategory)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []MoneySysCategory
|
||||
for rows.Next() {
|
||||
var i MoneySysCategory
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.Name,
|
||||
&i.Icon,
|
||||
&i.Type,
|
||||
&i.SortNumber,
|
||||
&i.CreateTime,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
@@ -0,0 +1,55 @@
|
||||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.30.0
|
||||
// source: money_user_category.sql
|
||||
|
||||
package dbtype
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/jackc/pgx/v5/pgtype"
|
||||
)
|
||||
|
||||
type BatchInsertMoneyUserCategoriesParams struct {
|
||||
ID int64
|
||||
UserID int64
|
||||
Name string
|
||||
Icon string
|
||||
Type pgtype.Int4
|
||||
SortNumber pgtype.Int4
|
||||
}
|
||||
|
||||
const findUserMoneyCategoriesByUserID = `-- name: FindUserMoneyCategoriesByUserID :many
|
||||
SELECT id, user_id, name, icon, type, sort_number, create_time
|
||||
FROM money_user_category
|
||||
WHERE user_id = $1
|
||||
`
|
||||
|
||||
func (q *Queries) FindUserMoneyCategoriesByUserID(ctx context.Context, userID int64) ([]MoneyUserCategory, error) {
|
||||
rows, err := q.db.Query(ctx, findUserMoneyCategoriesByUserID, userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []MoneyUserCategory
|
||||
for rows.Next() {
|
||||
var i MoneyUserCategory
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.UserID,
|
||||
&i.Name,
|
||||
&i.Icon,
|
||||
&i.Type,
|
||||
&i.SortNumber,
|
||||
&i.CreateTime,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
@@ -3,47 +3,21 @@
|
||||
// sqlc v1.30.0
|
||||
// source: user_info.sql
|
||||
|
||||
package sqlcg
|
||||
package dbtype
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
const createUser = `-- name: CreateUser :execrows
|
||||
INSERT INTO user_info (id, account, password)
|
||||
VALUES ($1, $2, $3)
|
||||
`
|
||||
|
||||
type CreateUserParams struct {
|
||||
ID int64
|
||||
Account string
|
||||
Password string
|
||||
}
|
||||
|
||||
// 插入用户并返回刚创建的记录
|
||||
func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) (int64, error) {
|
||||
result, err := q.db.Exec(ctx, createUser, arg.ID, arg.Account, arg.Password)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return result.RowsAffected(), nil
|
||||
}
|
||||
|
||||
const getUserByAccountAndPassword = `-- name: GetUserByAccountAndPassword :one
|
||||
const getUserByAccount = `-- name: GetUserByAccount :one
|
||||
SELECT id, seq_no, account, password, email, username, gender, create_time, update_time, last_login_time
|
||||
FROM user_info
|
||||
WHERE account = $1
|
||||
AND password = $2
|
||||
`
|
||||
|
||||
type GetUserByAccountAndPasswordParams struct {
|
||||
Account string
|
||||
Password string
|
||||
}
|
||||
|
||||
// 根据账号和密码查询单条用户记录(登录用)
|
||||
func (q *Queries) GetUserByAccountAndPassword(ctx context.Context, arg GetUserByAccountAndPasswordParams) (UserInfo, error) {
|
||||
row := q.db.QueryRow(ctx, getUserByAccountAndPassword, arg.Account, arg.Password)
|
||||
// 根据账号查询单条用户记录
|
||||
func (q *Queries) GetUserByAccount(ctx context.Context, account string) (UserInfo, error) {
|
||||
row := q.db.QueryRow(ctx, getUserByAccount, account)
|
||||
var i UserInfo
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
@@ -85,13 +59,64 @@ func (q *Queries) GetUserById(ctx context.Context, id int64) (UserInfo, error) {
|
||||
return i, err
|
||||
}
|
||||
|
||||
const getUserForLogin = `-- name: GetUserForLogin :one
|
||||
SELECT id, seq_no, account, password, email, username, gender, create_time, update_time, last_login_time
|
||||
FROM user_info
|
||||
WHERE account = $1
|
||||
AND password = $2
|
||||
`
|
||||
|
||||
type GetUserForLoginParams struct {
|
||||
Account string
|
||||
Password string
|
||||
}
|
||||
|
||||
// 根据账号和密码查询单条用户记录(登录用)
|
||||
func (q *Queries) GetUserForLogin(ctx context.Context, arg GetUserForLoginParams) (UserInfo, error) {
|
||||
row := q.db.QueryRow(ctx, getUserForLogin, arg.Account, arg.Password)
|
||||
var i UserInfo
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.SeqNo,
|
||||
&i.Account,
|
||||
&i.Password,
|
||||
&i.Email,
|
||||
&i.Username,
|
||||
&i.Gender,
|
||||
&i.CreateTime,
|
||||
&i.UpdateTime,
|
||||
&i.LastLoginTime,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
|
||||
const insertUser = `-- name: InsertUser :execrows
|
||||
INSERT INTO user_info (id, account, password)
|
||||
VALUES ($1, $2, $3)
|
||||
`
|
||||
|
||||
type InsertUserParams struct {
|
||||
ID int64
|
||||
Account string
|
||||
Password string
|
||||
}
|
||||
|
||||
// 插入用户并返回刚创建的记录
|
||||
func (q *Queries) InsertUser(ctx context.Context, arg InsertUserParams) (int64, error) {
|
||||
result, err := q.db.Exec(ctx, insertUser, arg.ID, arg.Account, arg.Password)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
return result.RowsAffected(), nil
|
||||
}
|
||||
|
||||
const updateUserLoginLastTime = `-- name: UpdateUserLoginLastTime :execrows
|
||||
UPDATE user_info
|
||||
SET last_login_time = now()
|
||||
WHERE id = $1
|
||||
`
|
||||
|
||||
// 更新用户最后登录时间,并返回影响的行数
|
||||
// 更新用户最后登录时间,并返回更新后的记录
|
||||
func (q *Queries) UpdateUserLoginLastTime(ctx context.Context, id int64) (int64, error) {
|
||||
result, err := q.db.Exec(ctx, updateUserLoginLastTime, id)
|
||||
if err != nil {
|
||||
|
||||
Binary file not shown.
@@ -28,8 +28,10 @@ require (
|
||||
github.com/cloudwego/netpoll v0.7.2 // indirect
|
||||
github.com/elastic/pkcs8 v1.0.0 // indirect
|
||||
github.com/fsnotify/fsnotify v1.9.0 // indirect
|
||||
github.com/go-errors/errors v1.5.1 // indirect
|
||||
github.com/go-openapi/inflect v0.21.3 // indirect
|
||||
github.com/go-sql-driver/mysql v1.9.3 // indirect
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
|
||||
github.com/goccy/go-json v0.10.5 // indirect
|
||||
github.com/golang/snappy v0.0.4 // indirect
|
||||
github.com/google/go-cmp v0.7.0 // indirect
|
||||
@@ -44,6 +46,15 @@ require (
|
||||
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
|
||||
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
|
||||
github.com/nyaruka/phonenumbers v1.6.7 // indirect
|
||||
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
|
||||
github.com/pkg/errors v0.9.1 // indirect
|
||||
github.com/sagikazarmark/locafero v0.11.0 // indirect
|
||||
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
|
||||
github.com/spf13/afero v1.15.0 // indirect
|
||||
github.com/spf13/cast v1.10.0 // indirect
|
||||
github.com/spf13/pflag v1.0.10 // indirect
|
||||
github.com/spf13/viper v1.21.0 // indirect
|
||||
github.com/subosito/gotenv v1.6.0 // indirect
|
||||
github.com/syndtr/goleveldb v1.0.0 // indirect
|
||||
github.com/tidwall/gjson v1.18.0 // indirect
|
||||
github.com/tidwall/match v1.2.0 // indirect
|
||||
@@ -52,6 +63,7 @@ require (
|
||||
github.com/zclconf/go-cty v1.17.0 // indirect
|
||||
github.com/zclconf/go-cty-yaml v1.1.0 // indirect
|
||||
go.uber.org/multierr v1.11.0 // indirect
|
||||
go.yaml.in/yaml/v3 v3.0.4 // indirect
|
||||
golang.org/x/arch v0.23.0 // indirect
|
||||
golang.org/x/crypto v0.45.0 // indirect
|
||||
golang.org/x/exp v0.0.0-20251125195548-87e1e737ad39 // indirect
|
||||
|
||||
@@ -45,6 +45,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
|
||||
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
|
||||
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
|
||||
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
|
||||
github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=
|
||||
github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
|
||||
github.com/go-openapi/inflect v0.21.3 h1:TmQvw+9eLrsNp4X0BBQacEZZtAnzk2z1FaLdQQJsDiU=
|
||||
github.com/go-openapi/inflect v0.21.3/go.mod h1:INezMuUu7SJQc2AyR3WO0DqqYUJSj8Kb4hBd7WtjlAw=
|
||||
github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg=
|
||||
@@ -52,6 +54,8 @@ github.com/go-sql-driver/mysql v1.9.3 h1:U/N249h2WzJ3Ukj8SowVFjdtZKfu9vlLZxjPXV1
|
||||
github.com/go-sql-driver/mysql v1.9.3/go.mod h1:qn46aNg1333BRMNU69Lq93t8du/dwxI64Gl8i5p1WMU=
|
||||
github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68=
|
||||
github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA=
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0 h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
|
||||
github.com/go-viper/mapstructure/v2 v2.4.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
|
||||
github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4=
|
||||
github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M=
|
||||
github.com/golang-jwt/jwt/v4 v4.5.2 h1:YtQM7lnr8iZ+j5q71MGKkNw9Mn7AjHM68uc9g5fXeUI=
|
||||
@@ -120,12 +124,28 @@ github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
|
||||
github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/sagikazarmark/locafero v0.11.0 h1:1iurJgmM9G3PA/I+wWYIOw/5SyBtxapeHDcg+AAIFXc=
|
||||
github.com/sagikazarmark/locafero v0.11.0/go.mod h1:nVIGvgyzw595SUSUE6tvCp3YYTeHs15MvlmU87WwIik=
|
||||
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 h1:+jumHNA0Wrelhe64i8F6HNlS8pkoyMv5sreGx2Ry5Rw=
|
||||
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8/go.mod h1:3n1Cwaq1E1/1lhQhtRK2ts/ZwZEhjcQeJQ1RuC6Q/8U=
|
||||
github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I=
|
||||
github.com/spf13/afero v1.15.0/go.mod h1:NC2ByUVxtQs4b3sIUphxK0NioZnmxgyCrfzeuq8lxMg=
|
||||
github.com/spf13/cast v1.10.0 h1:h2x0u2shc1QuLHfxi+cTJvs30+ZAHOGRic8uyGTDWxY=
|
||||
github.com/spf13/cast v1.10.0/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo=
|
||||
github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I=
|
||||
github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
|
||||
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU=
|
||||
github.com/spf13/viper v1.21.0/go.mod h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
|
||||
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
|
||||
@@ -142,6 +162,8 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8
|
||||
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
|
||||
github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
|
||||
github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
|
||||
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
|
||||
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
|
||||
github.com/syndtr/goleveldb v1.0.0 h1:fBdIW9lB4Iz0n9khmH8w27SJ3QEJ7+IgjPEwGSZiFdE=
|
||||
github.com/syndtr/goleveldb v1.0.0/go.mod h1:ZVVdQEZoIme9iO1Ch2Jdy24qqXrMMOU6lpPAyBWyWuQ=
|
||||
github.com/tidwall/gjson v1.9.3/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
|
||||
@@ -169,6 +191,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
|
||||
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
|
||||
go.uber.org/zap v1.27.1 h1:08RqriUEv8+ArZRYSTXy1LeBScaMpVSTBhCeaZYfMYc=
|
||||
go.uber.org/zap v1.27.1/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E=
|
||||
go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
|
||||
go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
|
||||
golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8=
|
||||
golang.org/x/arch v0.23.0 h1:lKF64A2jF6Zd8L0knGltUnegD62JMFBiCPBmQpToHhg=
|
||||
golang.org/x/arch v0.23.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A=
|
||||
|
||||
+15
-2
@@ -16,8 +16,8 @@ message LoginDefaultResp {
|
||||
string refreshToken = 2;
|
||||
int64 userId = 3;
|
||||
string username = 4;
|
||||
int64 seqNo = 5;
|
||||
int64 gender = 6;
|
||||
int32 seqNo = 5;
|
||||
int32 gender = 6;
|
||||
}
|
||||
|
||||
message RegisterDefaultReq {
|
||||
@@ -29,6 +29,13 @@ message RegisterDefaultResp {
|
||||
|
||||
}
|
||||
|
||||
message RefreshAccessTokenReq {
|
||||
}
|
||||
|
||||
message RefreshAccessTokenResp {
|
||||
string accessToken = 1;
|
||||
}
|
||||
|
||||
service LoginService {
|
||||
rpc LoginDefault(LoginDefaultReq) returns(LoginDefaultResp) {
|
||||
option (api.post) = "/auth/login/default";
|
||||
@@ -40,3 +47,9 @@ service RegisterService {
|
||||
option (api.post) = "/auth/register/default";
|
||||
}
|
||||
}
|
||||
|
||||
service TokenService {
|
||||
rpc RefreshAccessToken(RefreshAccessTokenReq) returns(RefreshAccessTokenResp) {
|
||||
option (api.post) = "/auth/refreshToken";
|
||||
}
|
||||
}
|
||||
@@ -1,28 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package auth;
|
||||
|
||||
option go_package = "auth/login";
|
||||
|
||||
import "api.proto";
|
||||
|
||||
message LoginDefaultReq {
|
||||
string Account = 1[(api.body)="account",(api.vd)="$!=''"];
|
||||
string Password = 2[(api.body)="password",(api.vd)="$!=''"];
|
||||
}
|
||||
|
||||
message LoginDefaultResp {
|
||||
string token = 1;
|
||||
string refreshToken = 2;
|
||||
int64 userId = 3;
|
||||
string username = 4;
|
||||
int64 seqNo = 5;
|
||||
int64 gender = 6;
|
||||
}
|
||||
|
||||
service LoginService {
|
||||
rpc LoginDefault(LoginDefaultReq) returns(LoginDefaultResp) {
|
||||
option (api.post) = "/auth/login/default";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
syntax = "proto3";
|
||||
|
||||
package auth;
|
||||
|
||||
option go_package = "auth/register";
|
||||
|
||||
import "api.proto";
|
||||
|
||||
|
||||
message RegisterDefaultReq {
|
||||
string Account = 1[(api.body)="account",(api.vd)="$!=''"];
|
||||
string Password = 2[(api.body)="password",(api.vd)="$!=''"];
|
||||
}
|
||||
|
||||
message RegisterDefaultResp {
|
||||
|
||||
}
|
||||
|
||||
service RegisterService {
|
||||
rpc RegisterDefault(RegisterDefaultReq) returns(RegisterDefaultResp) {
|
||||
option (api.post) = "/auth/register/default";
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
syntax = "proto3";
|
||||
|
||||
|
||||
package money_category;
|
||||
|
||||
option go_package = "money_category";
|
||||
|
||||
import "api.proto";
|
||||
|
||||
|
||||
message QueryUserMoneyCategoryReq{}
|
||||
message UserMoneyCategory {
|
||||
int64 id = 1;
|
||||
string name = 2;
|
||||
string icon = 3;
|
||||
int32 type = 4;
|
||||
int32 sort_number = 5;
|
||||
}
|
||||
|
||||
message QueryUserMoneyCategoryResp {
|
||||
repeated UserMoneyCategory categories = 1;
|
||||
}
|
||||
service MoneyCategoryService {
|
||||
rpc QueryUserMoneyCategory(QueryUserMoneyCategoryReq) returns (QueryUserMoneyCategoryResp){
|
||||
option (api.get) = '/money/category';
|
||||
};
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"cn/oneao/base-go/conf"
|
||||
"github.com/cloudwego/hertz/pkg/common/hlog"
|
||||
"go.uber.org/zap"
|
||||
"go.uber.org/zap/zapcore"
|
||||
@@ -13,46 +14,63 @@ import (
|
||||
)
|
||||
|
||||
var (
|
||||
// 暴露底层 zap logger 供 logreq 使用
|
||||
zapLogger *zap.Logger
|
||||
zapLogger *zap.Logger
|
||||
mu sync.Mutex
|
||||
currentDay = make(map[string]string)
|
||||
currentSync = make(map[string]zapcore.WriteSyncer)
|
||||
)
|
||||
|
||||
// InitLog 从配置初始化日志
|
||||
func InitLog() {
|
||||
dynamicLevel := zap.NewAtomicLevel()
|
||||
cfg := conf.GetConf().Log // LogConfig 从 YAML 读取
|
||||
|
||||
dynamicLevel.SetLevel(zap.DebugLevel)
|
||||
if cfg.Dir == "" {
|
||||
cfg.Dir = "./logs"
|
||||
}
|
||||
if cfg.MaxSize <= 0 {
|
||||
cfg.MaxSize = 10
|
||||
}
|
||||
if cfg.MaxBackups <= 0 {
|
||||
cfg.MaxBackups = 30
|
||||
}
|
||||
if cfg.MaxAge <= 0 {
|
||||
cfg.MaxAge = 7
|
||||
}
|
||||
|
||||
dynamicLevel := zap.NewAtomicLevel()
|
||||
dynamicLevel.SetLevel(LogLevel())
|
||||
|
||||
logger := NewLogger(
|
||||
WithCores([]CoreConfig{
|
||||
{
|
||||
Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
|
||||
Enc: zapcore.NewConsoleEncoder(consoleEncoderConfig()),
|
||||
Ws: zapcore.AddSync(os.Stdout),
|
||||
Lvl: dynamicLevel,
|
||||
},
|
||||
{
|
||||
Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
|
||||
Ws: getWriteSyncer("./logs/debug"),
|
||||
Ws: getWriteSyncer(fmt.Sprintf("%s/debug", cfg.Dir), &cfg),
|
||||
Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
|
||||
return lev == zap.DebugLevel
|
||||
}),
|
||||
},
|
||||
{
|
||||
Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
|
||||
Ws: getWriteSyncer("./logs/info"),
|
||||
Ws: getWriteSyncer(fmt.Sprintf("%s/info", cfg.Dir), &cfg),
|
||||
Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
|
||||
return lev == zap.InfoLevel
|
||||
}),
|
||||
},
|
||||
{
|
||||
Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
|
||||
Ws: getWriteSyncer("./logs/warn"),
|
||||
Ws: getWriteSyncer(fmt.Sprintf("%s/warn", cfg.Dir), &cfg),
|
||||
Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
|
||||
return lev == zap.WarnLevel
|
||||
}),
|
||||
},
|
||||
{
|
||||
Enc: zapcore.NewJSONEncoder(humanEncoderConfig()),
|
||||
Ws: getWriteSyncer("./logs/error"),
|
||||
Ws: getWriteSyncer(fmt.Sprintf("%s/error", cfg.Dir), &cfg),
|
||||
Lvl: zap.LevelEnablerFunc(func(lev zapcore.Level) bool {
|
||||
return lev >= zap.ErrorLevel
|
||||
}),
|
||||
@@ -61,35 +79,10 @@ func InitLog() {
|
||||
)
|
||||
|
||||
hlog.SetLogger(logger)
|
||||
|
||||
zapLogger = logger.Logger()
|
||||
}
|
||||
|
||||
// humanEncoderConfig copy from zap
|
||||
func humanEncoderConfig() zapcore.EncoderConfig {
|
||||
return zapcore.EncoderConfig{
|
||||
MessageKey: "Message",
|
||||
LevelKey: "Level",
|
||||
NameKey: "Name",
|
||||
TimeKey: "Ts",
|
||||
CallerKey: "Caller",
|
||||
FunctionKey: "Func",
|
||||
StacktraceKey: "Stacktrace",
|
||||
LineEnding: "\n",
|
||||
EncodeTime: zapcore.ISO8601TimeEncoder,
|
||||
EncodeLevel: zapcore.LowercaseLevelEncoder,
|
||||
EncodeDuration: zapcore.SecondsDurationEncoder,
|
||||
EncodeCaller: zapcore.ShortCallerEncoder,
|
||||
}
|
||||
}
|
||||
|
||||
var (
|
||||
mu sync.Mutex
|
||||
currentDay = make(map[string]string)
|
||||
currentSync = make(map[string]zapcore.WriteSyncer)
|
||||
)
|
||||
|
||||
func getWriteSyncer(basePath string) zapcore.WriteSyncer {
|
||||
func getWriteSyncer(basePath string, cfg *conf.LogConfig) zapcore.WriteSyncer {
|
||||
mu.Lock()
|
||||
defer mu.Unlock()
|
||||
|
||||
@@ -100,21 +93,68 @@ func getWriteSyncer(basePath string) zapcore.WriteSyncer {
|
||||
|
||||
currentSync[basePath] = zapcore.AddSync(&lumberjack.Logger{
|
||||
Filename: file,
|
||||
MaxSize: 10,
|
||||
MaxBackups: 50000,
|
||||
MaxAge: 5,
|
||||
Compress: true,
|
||||
MaxSize: cfg.MaxSize,
|
||||
MaxBackups: cfg.MaxBackups,
|
||||
MaxAge: cfg.MaxAge,
|
||||
Compress: cfg.Compress,
|
||||
LocalTime: true,
|
||||
})
|
||||
}
|
||||
return currentSync[basePath]
|
||||
}
|
||||
func Sync() error {
|
||||
if zapLogger != nil {
|
||||
return zapLogger.Sync()
|
||||
|
||||
func LogLevel() zapcore.Level {
|
||||
level := conf.GetConf().Log.Level
|
||||
switch level {
|
||||
case "trace":
|
||||
return zapcore.DebugLevel
|
||||
case "debug":
|
||||
return zapcore.DebugLevel
|
||||
case "info":
|
||||
return zapcore.InfoLevel
|
||||
case "warn":
|
||||
return zapcore.WarnLevel
|
||||
case "error":
|
||||
return zapcore.ErrorLevel
|
||||
case "dpanic":
|
||||
return zapcore.DPanicLevel
|
||||
case "panic":
|
||||
return zapcore.PanicLevel
|
||||
case "fatal":
|
||||
return zapcore.FatalLevel
|
||||
default:
|
||||
return zapcore.InfoLevel
|
||||
}
|
||||
return nil
|
||||
}
|
||||
func GetZapLogger() *zap.Logger {
|
||||
return zapLogger
|
||||
|
||||
func consoleEncoderConfig() zapcore.EncoderConfig {
|
||||
return zapcore.EncoderConfig{
|
||||
MessageKey: "msg",
|
||||
LevelKey: "level",
|
||||
TimeKey: "ts",
|
||||
EncodeTime: customTimeEncoder,
|
||||
EncodeLevel: zapcore.CapitalColorLevelEncoder,
|
||||
EncodeCaller: zapcore.ShortCallerEncoder,
|
||||
}
|
||||
}
|
||||
|
||||
func humanEncoderConfig() zapcore.EncoderConfig {
|
||||
return zapcore.EncoderConfig{
|
||||
MessageKey: "Message",
|
||||
LevelKey: "Level",
|
||||
NameKey: "Name",
|
||||
TimeKey: "Ts",
|
||||
CallerKey: "Caller",
|
||||
FunctionKey: "Func",
|
||||
StacktraceKey: "Stacktrace",
|
||||
LineEnding: "\n",
|
||||
EncodeTime: customTimeEncoder,
|
||||
EncodeLevel: zapcore.LowercaseLevelEncoder,
|
||||
EncodeDuration: zapcore.SecondsDurationEncoder,
|
||||
EncodeCaller: zapcore.ShortCallerEncoder,
|
||||
}
|
||||
}
|
||||
|
||||
func customTimeEncoder(t time.Time, enc zapcore.PrimitiveArrayEncoder) {
|
||||
enc.AppendString(t.Format("2006-01-02 15:04:05.000"))
|
||||
}
|
||||
@@ -1,13 +1,38 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"cn/oneao/base-go/biz/router/middleware"
|
||||
"cn/oneao/base-go/conf"
|
||||
"cn/oneao/base-go/db"
|
||||
"cn/oneao/base-go/logx"
|
||||
"cn/oneao/base-go/utils/idgen"
|
||||
"cn/oneao/base-go/utils/jwtx"
|
||||
"github.com/cloudwego/hertz/pkg/app/server"
|
||||
"github.com/hertz-contrib/requestid"
|
||||
)
|
||||
|
||||
func main() {
|
||||
h := server.Default()
|
||||
// 初始化雪花id
|
||||
options := idgen.NewIdGeneratorOptions(conf.GetConf().Snowflake.WorkerID)
|
||||
idgen.SetIdGenerator(options)
|
||||
|
||||
// 数据库
|
||||
db.InitDB()
|
||||
// 日志
|
||||
logx.InitLog()
|
||||
// jwt
|
||||
jwtx.InitJwt()
|
||||
|
||||
h := server.Default(
|
||||
server.WithBasePath(conf.GetConf().Server.BaseUrl),
|
||||
server.WithHostPorts(":"+conf.GetConf().Server.Port),
|
||||
)
|
||||
|
||||
// 全局中间件
|
||||
h.Use(requestid.New())
|
||||
h.Use(middleware.Log())
|
||||
h.Use(middleware.Error())
|
||||
h.Use(middleware.Auth())
|
||||
|
||||
register(h)
|
||||
h.Spin()
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
)
|
||||
|
||||
// Error 中间件
|
||||
func Error() app.HandlerFunc {
|
||||
return func(ctx context.Context, c *app.RequestContext) {
|
||||
c.Next(ctx)
|
||||
|
||||
if err := c.Errors.Last(); err != nil {
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
// Code generated by hertz generator.
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
handler "cn/oneao/base-go/biz/handler"
|
||||
"github.com/cloudwego/hertz/pkg/app/server"
|
||||
)
|
||||
|
||||
// customizeRegister registers customize routers.
|
||||
func customizedRegister(r *server.Hertz) {
|
||||
r.GET("/ping", handler.Ping)
|
||||
|
||||
// your code ...
|
||||
}
|
||||
@@ -12,5 +12,4 @@ func register(r *server.Hertz) {
|
||||
|
||||
router.GeneratedRegister(r)
|
||||
|
||||
customizedRegister(r)
|
||||
}
|
||||
@@ -5,6 +5,6 @@ sql:
|
||||
schema: "db/schema.sql" # schema.sql文件的路径,该文件主要用于存储DDL
|
||||
gen:
|
||||
go:
|
||||
package: "sqlcg" # 模块的包名
|
||||
package: "dbtype" # 模块的包名
|
||||
out: "db/sqlc" # 代码生成路径
|
||||
sql_package: "pgx/v5"
|
||||
@@ -0,0 +1,29 @@
|
||||
package errorx
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"github.com/cloudwego/hertz/pkg/app"
|
||||
"github.com/jackc/pgx/v5"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// Wrap 包装 error,附加调用栈
|
||||
func Wrap(err error) error {
|
||||
if err == nil {
|
||||
return nil
|
||||
}
|
||||
return errors.WithStack(err)
|
||||
}
|
||||
|
||||
// AddError 简化版,自动 wrap 并注册到 ctx
|
||||
func AddError(c *app.RequestContext, err error) {
|
||||
if err == nil {
|
||||
return
|
||||
}
|
||||
_ = c.Error(Wrap(err)) // 自动 wrap 并注册
|
||||
}
|
||||
|
||||
// IsNotFound 判断 err 是否因为数据库中没找到数据
|
||||
func IsNotFound(err error) bool {
|
||||
return errors.Is(err, sql.ErrNoRows) || errors.Is(err, pgx.ErrNoRows)
|
||||
}
|
||||
@@ -1,37 +1,91 @@
|
||||
package jwtx
|
||||
|
||||
import (
|
||||
"cn/oneao/base-go/config"
|
||||
"cn/oneao/base-go/conf"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/golang-jwt/jwt/v4"
|
||||
)
|
||||
|
||||
// CustomClaims 自定义 payload,可扩展其他信息
|
||||
type CustomClaims struct {
|
||||
UserID int64 `json:"user_id"`
|
||||
jwt.RegisteredClaims
|
||||
}
|
||||
|
||||
// TokenResult 用于返回验证结果
|
||||
type TokenResult struct {
|
||||
Claims *CustomClaims
|
||||
IsValid bool
|
||||
IsExpired bool
|
||||
}
|
||||
|
||||
// CreateAccessToken 创建 Access Token,只返回 token 和 error
|
||||
type jwtManager struct {
|
||||
secret string
|
||||
accessExpiry time.Duration
|
||||
refreshExpiry time.Duration
|
||||
}
|
||||
|
||||
var (
|
||||
manager *jwtManager
|
||||
once sync.Once
|
||||
)
|
||||
|
||||
// InitJwt 初始化全局 JWT 配置,只能调用一次
|
||||
func InitJwt() {
|
||||
once.Do(func() {
|
||||
manager = &jwtManager{
|
||||
secret: conf.GetConf().JWT.Secret,
|
||||
accessExpiry: conf.GetConf().JWT.AccessExpiry,
|
||||
refreshExpiry: conf.GetConf().JWT.RefreshExpiry,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// CreateAccessToken 全局函数创建 Access Token
|
||||
func CreateAccessToken(userID int64) (string, error) {
|
||||
return createToken(userID, config.App.JWT.AccessExpiry)
|
||||
return manager.createToken(userID, manager.accessExpiry)
|
||||
}
|
||||
|
||||
// CreateRefreshToken 创建 Refresh Token,只返回 token 和 error
|
||||
// CreateRefreshToken 全局函数创建 Refresh Token
|
||||
func CreateRefreshToken(userID int64) (string, error) {
|
||||
return createToken(userID, config.App.JWT.RefreshExpiry)
|
||||
return manager.createToken(userID, manager.refreshExpiry)
|
||||
}
|
||||
|
||||
// 内部方法,根据过期时间生成 token
|
||||
func createToken(userID int64, expiry time.Duration) (string, error) {
|
||||
// VerifyToken 全局函数验证 Token
|
||||
func VerifyToken(tokenString string) TokenResult {
|
||||
result := TokenResult{IsValid: false, IsExpired: false}
|
||||
|
||||
if tokenString == "" || manager == nil {
|
||||
return result
|
||||
}
|
||||
|
||||
token, err := jwt.ParseWithClaims(tokenString, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(manager.secret), nil
|
||||
})
|
||||
|
||||
if token == nil {
|
||||
return result
|
||||
}
|
||||
|
||||
claims, ok := token.Claims.(*CustomClaims)
|
||||
if !ok {
|
||||
return result
|
||||
}
|
||||
|
||||
if err != nil || !token.Valid {
|
||||
return result
|
||||
}
|
||||
|
||||
result.Claims = claims
|
||||
result.IsValid = true
|
||||
if claims.ExpiresAt != nil && time.Now().After(claims.ExpiresAt.Time) {
|
||||
result.IsExpired = true
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
// 内部方法,生成 Token
|
||||
func (j *jwtManager) createToken(userID int64, expiry time.Duration) (string, error) {
|
||||
claims := &CustomClaims{
|
||||
UserID: userID,
|
||||
RegisteredClaims: jwt.RegisteredClaims{
|
||||
@@ -41,65 +95,13 @@ func createToken(userID int64, expiry time.Duration) (string, error) {
|
||||
|
||||
switch {
|
||||
case expiry > 0:
|
||||
expireAt := time.Now().Add(expiry)
|
||||
claims.ExpiresAt = jwt.NewNumericDate(expireAt)
|
||||
claims.ExpiresAt = jwt.NewNumericDate(time.Now().Add(expiry))
|
||||
case expiry == -1:
|
||||
claims.ExpiresAt = nil // 永不过期
|
||||
default:
|
||||
expireAt := time.Now().Add(time.Hour)
|
||||
claims.ExpiresAt = jwt.NewNumericDate(expireAt)
|
||||
claims.ExpiresAt = jwt.NewNumericDate(time.Now().Add(time.Hour))
|
||||
}
|
||||
|
||||
token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
|
||||
signed, err := token.SignedString([]byte(config.App.JWT.Secret))
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return signed, nil
|
||||
}
|
||||
|
||||
// VerifyToken 验证 token 并返回结构化结果
|
||||
func VerifyToken(tokenString string) TokenResult {
|
||||
result := TokenResult{
|
||||
IsValid: false,
|
||||
IsExpired: false,
|
||||
}
|
||||
|
||||
// 🧩 1. token 为空
|
||||
if tokenString == "" {
|
||||
return result
|
||||
}
|
||||
|
||||
// 🧩 2. 解析 token
|
||||
token, err := jwt.ParseWithClaims(tokenString, &CustomClaims{}, func(token *jwt.Token) (interface{}, error) {
|
||||
return []byte(config.App.JWT.Secret), nil
|
||||
})
|
||||
|
||||
// 🧩 3. token 为 nil(解析异常)
|
||||
if token == nil {
|
||||
return result
|
||||
}
|
||||
|
||||
// 🧩 4. 提取 claims 并验证
|
||||
claims, ok := token.Claims.(*CustomClaims)
|
||||
if !ok {
|
||||
return result
|
||||
}
|
||||
|
||||
// 🧩 5. 解析失败或签名无效
|
||||
if err != nil || !token.Valid {
|
||||
return result
|
||||
}
|
||||
|
||||
// ✅ 6. 填充结果
|
||||
result.Claims = claims
|
||||
result.IsValid = true
|
||||
|
||||
// 🧩 7. 检查是否过期
|
||||
if claims.ExpiresAt != nil && time.Now().After(claims.ExpiresAt.Time) {
|
||||
result.IsExpired = true
|
||||
}
|
||||
|
||||
return result
|
||||
return token.SignedString([]byte(j.secret))
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package pathx
|
||||
|
||||
import (
|
||||
"cn/oneao/base-go/conf"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// MatchPath 判断给定路径是否在白名单中
|
||||
func MatchPath(path string, whitelist []string) bool {
|
||||
baseUrl := conf.GetConf().Server.BaseUrl
|
||||
|
||||
for _, p := range whitelist {
|
||||
fullPath := baseUrl + p
|
||||
if strings.HasPrefix(path, fullPath) {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
-5380
File diff suppressed because it is too large.
Load diff
Reference in new issue
Block a user