2024-10-17 22:43:20 +08:00
|
|
|
|
package web
|
|
|
|
|
|
|
|
|
|
import (
|
2024-10-20 12:10:17 +08:00
|
|
|
|
"catface/app/global/consts"
|
2024-10-20 21:01:12 +08:00
|
|
|
|
"catface/app/global/errcode"
|
2024-10-20 11:50:26 +08:00
|
|
|
|
"catface/app/global/variable"
|
|
|
|
|
"catface/app/http/validator/core/data_transfer"
|
2024-10-20 17:33:28 +08:00
|
|
|
|
"catface/app/model"
|
2024-11-12 15:53:47 +08:00
|
|
|
|
"catface/app/model_es"
|
2024-10-20 21:01:12 +08:00
|
|
|
|
"catface/app/service/encounter/curd"
|
2024-10-20 12:10:17 +08:00
|
|
|
|
"catface/app/service/upload_file"
|
|
|
|
|
"catface/app/utils/response"
|
|
|
|
|
"path/filepath"
|
2024-10-20 12:16:35 +08:00
|
|
|
|
"strconv"
|
2024-10-20 11:50:26 +08:00
|
|
|
|
|
2024-10-17 22:43:20 +08:00
|
|
|
|
"github.com/gin-gonic/gin"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Encounters struct {
|
|
|
|
|
}
|
|
|
|
|
|
2024-10-18 10:04:01 +08:00
|
|
|
|
func (e *Encounters) Create(context *gin.Context) {
|
2024-10-20 11:50:26 +08:00
|
|
|
|
photos := data_transfer.GetStringSlice(context, "photos")
|
|
|
|
|
if len(photos) > 0 {
|
2024-10-20 12:16:35 +08:00
|
|
|
|
userId := strconv.Itoa(int(context.GetFloat64(consts.ValidatorPrefix + "user_id")))
|
2024-10-20 11:50:26 +08:00
|
|
|
|
avatar := photos[0]
|
|
|
|
|
avatarWidth := variable.ConfigYml.GetFloat64("FileUploadSetting.AvatarWidth")
|
2024-10-17 22:43:20 +08:00
|
|
|
|
|
2024-11-12 12:13:50 +08:00
|
|
|
|
srcPath := filepath.Join(variable.ConfigYml.GetString("FileUploadSetting.UploadFileSavePath"), "encounterPhotos", "hum_"+userId, avatar)
|
|
|
|
|
dstPath := filepath.Join(variable.ConfigYml.GetString("FileUploadSetting.UploadFileSavePath"), "encounterAvatar", avatar)
|
2024-10-20 12:10:17 +08:00
|
|
|
|
avatarHeight, err := upload_file.ResizeImage(srcPath, dstPath, int(avatarWidth))
|
|
|
|
|
if err != nil {
|
|
|
|
|
response.Fail(context, consts.FilesUploadFailCode, consts.FilesUploadFailMsg, "")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
context.Set(consts.ValidatorPrefix+"avatar", avatar)
|
2024-10-20 17:54:37 +08:00
|
|
|
|
context.Set(consts.ValidatorPrefix+"avatar_height", float64(avatarHeight))
|
|
|
|
|
context.Set(consts.ValidatorPrefix+"avatar_width", float64(avatarWidth))
|
2024-10-20 11:50:26 +08:00
|
|
|
|
}
|
2024-11-09 04:53:28 +08:00
|
|
|
|
poi := context.GetStringMap(consts.ValidatorPrefix + "poi")
|
|
|
|
|
if poi != nil {
|
|
|
|
|
// 感觉这里就是获取信息之后,然后解析后再存储,方便后续 Model 直接绑定到数据。
|
|
|
|
|
latitude := poi["latitude"].(float64)
|
|
|
|
|
longitude := poi["longitude"].(float64)
|
|
|
|
|
context.Set(consts.ValidatorPrefix+"latitude", latitude)
|
|
|
|
|
context.Set(consts.ValidatorPrefix+"longitude", longitude)
|
|
|
|
|
}
|
|
|
|
|
extra := context.GetStringMap(consts.ValidatorPrefix + "extra")
|
|
|
|
|
var tags []string
|
|
|
|
|
if extra != nil {
|
|
|
|
|
context.Set(consts.ValidatorPrefix+"topics", extra["topics"])
|
|
|
|
|
tags = data_transfer.GetStringSlice(context, "topics")
|
2024-11-13 18:56:22 +08:00
|
|
|
|
context.Set(consts.ValidatorPrefix+"tags_list", tags)
|
2024-11-09 04:53:28 +08:00
|
|
|
|
context.Set(consts.ValidatorPrefix+"tags", tags) // INFO 这里字段没有直接匹配上。
|
|
|
|
|
}
|
2024-11-13 18:56:22 +08:00
|
|
|
|
// STAGE - 2: Make []string to String
|
2024-10-20 17:33:28 +08:00
|
|
|
|
if res, err := data_transfer.ConvertSliceToString(photos); err == nil {
|
|
|
|
|
context.Set(consts.ValidatorPrefix+"photos", res)
|
|
|
|
|
} else {
|
|
|
|
|
response.Fail(context, consts.ValidatorParamsCheckFailCode, consts.ValidatorParamsCheckFailMsg, "")
|
|
|
|
|
return
|
|
|
|
|
}
|
2024-11-09 04:53:28 +08:00
|
|
|
|
if res, err := data_transfer.ConvertSliceToString(tags); err == nil {
|
|
|
|
|
context.Set(consts.ValidatorPrefix+"tags", res)
|
|
|
|
|
} else {
|
|
|
|
|
response.Fail(context, consts.ValidatorParamsCheckFailCode, consts.ValidatorParamsCheckFailMsg, "")
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
// STAGE -3: Real Insert - 1: ENC
|
2024-11-02 11:49:49 +08:00
|
|
|
|
animals_id := data_transfer.GetFloat64Slice(context, "animals_id") // 由于是 Slice 就交给 EAlink 内部遍历时处理。
|
2024-11-02 11:51:12 +08:00
|
|
|
|
// Real Insert - 2: EA LINK
|
2024-11-12 15:53:47 +08:00
|
|
|
|
if encounter, ok := model.CreateEncounterFactory("").InsertDate(context); ok {
|
|
|
|
|
// 2: EA Links; // TIP 感觉直接使用 go 会直接且清晰。
|
|
|
|
|
go model.CreateEncounterAnimalLinkFactory("").Insert(encounter.Id, animals_id)
|
|
|
|
|
|
2024-11-19 11:27:17 +08:00
|
|
|
|
// 3. ES speed // TODO 这里如何实现 不同 DB 之间的 “事务” 概念。
|
2024-11-20 17:32:10 +08:00
|
|
|
|
if level := int(context.GetFloat64(consts.ValidatorPrefix + "level")); level > 0 { // TEST 暂时全部数据都同步到 ES,不做 level 过滤。
|
2024-11-12 15:53:47 +08:00
|
|
|
|
go model_es.CreateEncounterESFactory(&encounter).InsertDocument()
|
2024-11-12 12:41:57 +08:00
|
|
|
|
}
|
2024-11-02 11:49:49 +08:00
|
|
|
|
|
2024-11-09 04:53:28 +08:00
|
|
|
|
response.Success(context, consts.CurdStatusOkMsg, gin.H{
|
2024-11-12 15:53:47 +08:00
|
|
|
|
"encounter_id": encounter.Id,
|
2024-11-09 04:53:28 +08:00
|
|
|
|
})
|
2024-10-20 17:33:28 +08:00
|
|
|
|
} else {
|
2024-11-02 11:49:49 +08:00
|
|
|
|
response.Fail(context, consts.CurdCreatFailCode, consts.CurdCreatFailMsg+", 新增错误", "")
|
2024-10-20 17:33:28 +08:00
|
|
|
|
}
|
2024-10-17 22:43:20 +08:00
|
|
|
|
}
|
2024-10-20 21:01:12 +08:00
|
|
|
|
|
|
|
|
|
func (e *Encounters) List(context *gin.Context) {
|
|
|
|
|
num := context.GetFloat64(consts.ValidatorPrefix + "num")
|
|
|
|
|
skip := context.GetFloat64(consts.ValidatorPrefix + "skip")
|
2024-10-21 01:24:01 +08:00
|
|
|
|
user_id := context.GetFloat64(consts.ValidatorPrefix + "user_id")
|
2024-11-02 11:06:27 +08:00
|
|
|
|
mode := context.GetString(consts.ValidatorPrefix + "mode")
|
2024-10-20 21:01:12 +08:00
|
|
|
|
|
2024-11-02 11:06:27 +08:00
|
|
|
|
encounters := curd.CreateEncounterCurdFactory().List(int(num), int(skip), int(user_id), mode)
|
2024-10-20 21:01:12 +08:00
|
|
|
|
if encounters != nil {
|
|
|
|
|
response.Success(context, consts.CurdStatusOkMsg, encounters)
|
|
|
|
|
} else {
|
2024-11-18 12:22:13 +08:00
|
|
|
|
code := errcode.ErrEncounterNoData
|
|
|
|
|
response.Fail(context, code, errcode.ErrMsg[code], errcode.ErrMsgForUser[code])
|
2024-10-20 21:01:12 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
2024-10-21 16:16:03 +08:00
|
|
|
|
|
|
|
|
|
func (e *Encounters) Detail(context *gin.Context) {
|
|
|
|
|
encounterId := context.Param("encounter_id")
|
|
|
|
|
|
|
|
|
|
encounters := curd.CreateEncounterCurdFactory().Detail(encounterId)
|
|
|
|
|
if encounters != nil {
|
|
|
|
|
response.Success(context, consts.CurdStatusOkMsg, encounters)
|
|
|
|
|
} else {
|
|
|
|
|
response.Fail(context, errcode.ErrDataNoFound, errcode.ErrMsg[errcode.ErrDataNoFound], "")
|
|
|
|
|
}
|
|
|
|
|
}
|