Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
157 changes: 141 additions & 16 deletions apis/language.go
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
package apis

import (
"github.com/gin-gonic/gin"
"github.com/mss-boot-io/mss-boot/pkg/response"
"github.com/mss-boot-io/mss-boot/pkg/response/actions"
"github.com/mss-boot-io/mss-boot/pkg/response/controller"
"fmt"
"log/slog"
"net/http"

"github.com/gin-gonic/gin"
"github.com/mss-boot-io/mss-boot-admin/center"
"github.com/mss-boot-io/mss-boot-admin/dto"
"github.com/mss-boot-io/mss-boot-admin/models"
"github.com/mss-boot-io/mss-boot/pkg/response"
"github.com/mss-boot-io/mss-boot/pkg/response/actions"
"github.com/mss-boot-io/mss-boot/pkg/response/controller"
"gorm.io/gorm"
"gorm.io/gorm/schema"
)

/*
Expand All @@ -26,7 +31,15 @@ func init() {
controller.WithSearch(new(dto.LanguageSearch)),
controller.WithModelProvider(actions.ModelProviderGorm),
controller.WithScope(center.Default.Scope),
controller.WithNoAuthAction(response.Search, response.Get),
controller.WithAfterDelete(LanguageDeleteCache),
controller.WithAfterUpdate(func(ctx *gin.Context, db *gorm.DB, m schema.Tabler) error {
err := LanguageDeleteCache(ctx, db, m)
if err != nil {
return err
}
return LanguageAddCache(ctx, db, m)
}),
controller.WithAfterCreate(LanguageAddCache),
),
}
response.AppendController(e)
Expand All @@ -36,17 +49,79 @@ type Language struct {
*controller.Simple
}

//func (e *Language) GetAction(key string) response.Action {
// if key == response.Search {
// return nil
// }
// return e.Simple.GetAction(key)
//}
//
//func (e *Language) Other(r *gin.RouterGroup) {
// search := e.Simple.GetAction(response.Search)
// r.GET("/languages", search.Handler())
//}
func (e *Language) Other(r *gin.RouterGroup) {
r.GET("/language/profile", e.Profile)
}

// Profile 获取语言配置
// @Summary 获取语言配置
// @Description 获取语言配置
// @Tags language
// @Accept application/json
// @Product application/json
// @Success 200 {object} map[string]map[string]string
// @Router /admin/api/language/profile [get]
func (e *Language) Profile(ctx *gin.Context) {
api := response.Make(ctx)
items := make([]*models.Language, 0)
resp := make(map[string]map[string]string)
tenant, err := center.GetTenant().GetTenant(ctx)
if err == nil && tenant != nil && center.GetCache() != nil {
keys := make([]string, 0)
err = center.GetCache().SMembers(ctx, fmt.Sprintf("%s:language", tenant.GetID())).ScanSlice(&keys)
if err == nil {
for i := range keys {
var v map[string]string
v, err = center.GetCache().HGetAll(ctx, fmt.Sprintf("%s:language:%s", tenant.GetID(), keys[i])).Result()
if err != nil {
break
}
resp[keys[i]] = v
}
if err == nil {
api.OK(resp)
return
}
}

}
err = center.GetDB(ctx, &models.Language{}).Find(&items).Error
if err != nil {
api.AddError(err).Log.Error("get languages error")
api.Err(http.StatusInternalServerError)
return
}
for i := range items {
if items[i].Defines == nil || len(*items[i].Defines) == 0 {
continue
}
for j := range *items[i].Defines {
if resp[items[i].Name] == nil {
resp[items[i].Name] = make(map[string]string)
}
resp[items[i].Name][(*items[i].Defines)[j].Group+"."+(*items[i].Defines)[j].Key] =
(*items[i].Defines)[j].Value
}
}
api.OK(resp)

if len(resp) > 0 {
if center.GetCache() != nil {
for k, v := range resp {
err = center.GetCache().HSet(ctx, fmt.Sprintf("%v:language:%s", tenant.GetID(), k), v).Err()
if err != nil {
slog.Error("set language cache error", "error", err)
continue
}
err = center.GetCache().SAdd(ctx, fmt.Sprintf("%s:language", tenant.GetID()), k).Err()
if err != nil {
slog.Error("set language cache error", "error", err)
continue
}
}
}
}
}

// Create 创建Language
// @Summary 创建Language
Expand Down Expand Up @@ -107,3 +182,53 @@ func (*Language) List(*gin.Context) {}
// @Router /admin/api/languages/{id} [delete]
// @Security Bearer
func (*Language) Delete(*gin.Context) {}

func LanguageDeleteCache(ctx *gin.Context, db *gorm.DB, m schema.Tabler) error {
tenant, err := center.GetTenant().GetTenant(ctx)
if err != nil || tenant == nil || center.GetCache() == nil {
return nil
}
if db == nil {
return nil
}
name := m.(*models.Language).Name
if name == "" {
return nil
}
slog.Debug(fmt.Sprintf("%s:language:%s", tenant.GetID(), name))
err = center.GetCache().Del(ctx, fmt.Sprintf("%s:language:%s", tenant.GetID(), name), "name").Err()
if err != nil {
slog.Error("delete language cache error", "error", err)
}
return nil
}

func LanguageAddCache(ctx *gin.Context, db *gorm.DB, m schema.Tabler) error {
tenant, err := center.GetTenant().GetTenant(ctx)
if err != nil || tenant == nil || center.GetCache() == nil {
return nil
}
if db == nil {
return nil
}
l := m.(*models.Language)
if l.Defines == nil || len(*l.Defines) == 0 {
return nil
}
data := make(map[string]string)
for i := range *l.Defines {
data[(*l.Defines)[i].Group+"."+(*l.Defines)[i].Key] = (*l.Defines)[i].Value
}
err = center.GetCache().HSet(ctx, fmt.Sprintf("%s:language:%s", tenant.GetID(), l.Name), data).Err()
if err != nil {
slog.Error("add language cache error", "error", err)
return err
}
err = center.GetCache().SAdd(ctx, fmt.Sprintf("%s:language", tenant.GetID()), l.Name).Err()
if err != nil {
slog.Error("add language cache error", "error", err)
return err
}
return nil

}
5 changes: 0 additions & 5 deletions center/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@ import (
"google.golang.org/grpc"
"gorm.io/gorm"
"gorm.io/gorm/schema"

"github.com/mss-boot-io/mss-boot/pkg/config/storage"
)

/*
Expand All @@ -38,9 +36,6 @@ type Center interface {
StatisticsImp
MakeRouterImp
GRPCClientImp
storage.AdapterCache
storage.AdapterQueue
storage.AdapterLocker
VerifyCodeStoreImp
}

Expand Down
4 changes: 4 additions & 0 deletions dto/user_auth_token.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ import "time"
* @Last Modified time: 2024/7/30 14:10:02
*/

type ResponseNonce struct {
Nonce string `json:"nonce"`
}

type UserAuthTokenGenerateRequest struct {
ValidityPeriod time.Duration `form:"validityPeriod" query:"validityPeriod"`
}
Loading