Add isjoined to event info and event list
All checks were successful
Client CMS Check Build (NixCN CMS) TeamCity build finished
Backend Check Build (NixCN CMS) TeamCity build finished

Signed-off-by: Asai Neko <sugar@sne.moe>
This commit is contained in:
2026-02-05 17:43:20 +08:00
parent a7a6b7aa4e
commit 4f0b4262ed
9 changed files with 191 additions and 19 deletions

View File

@@ -7,6 +7,7 @@ import (
"nixcn-cms/service/shared"
"github.com/google/uuid"
"gorm.io/gorm"
)
type EventInfoData struct {
@@ -15,6 +16,7 @@ type EventInfoData struct {
type EventInfoPayload struct {
Context context.Context
UserId uuid.UUID
Data *EventInfoData
}
@@ -87,6 +89,32 @@ func (self *EventServiceImpl) GetEventInfo(payload *EventInfoPayload) (result *E
return
}
var isJoined bool
joinedInfo, err := new(data.Attendance).GetAttendance(payload.Context, payload.UserId, payload.Data.EventId)
if err != nil && err != gorm.ErrRecordNotFound {
exception := new(exception.Builder).
SetStatus(exception.StatusUser).
SetService(exception.ServiceEvent).
SetEndpoint(exception.EndpointEventServiceInfo).
SetType(exception.TypeCommon).
SetOriginal(exception.CommonErrorDatabase).
SetError(err).
Throw(payload.Context)
result = &EventInfoResult{
Common: shared.CommonResult{
HttpCode: 500,
Exception: exception,
},
}
return
} else if err == gorm.ErrRecordNotFound {
isJoined = false
} else if joinedInfo.AttendanceId != uuid.Nil {
isJoined = true
}
result = &EventInfoResult{
Common: shared.CommonResult{
HttpCode: 200,
@@ -106,7 +134,8 @@ func (self *EventServiceImpl) GetEventInfo(payload *EventInfoPayload) (result *E
StartTime: event.StartTime,
EndTime: event.EndTime,
Thumbnail: event.Thumbnail,
RequireKyc: event.EnableKYC,
EnableKYC: event.EnableKYC,
IsJoined: isJoined,
JoinCount: joinCount,
CheckinCount: checkinCount,
},

View File

@@ -6,12 +6,19 @@ import (
"nixcn-cms/internal/exception"
"nixcn-cms/service/shared"
"strconv"
"github.com/google/uuid"
)
type EventListData struct {
Limit *string `json:"limit"`
Offset *string `json:"offset"`
}
type EventListPayload struct {
Context context.Context
Limit *string
Offset *string
UserId uuid.UUID
Data *EventListData
}
type EventListResult struct {
@@ -21,14 +28,14 @@ type EventListResult struct {
func (self *EventServiceImpl) ListEvents(payload *EventListPayload) (result *EventListResult) {
var limit string
if payload.Limit == nil || *payload.Limit == "" {
if payload.Data.Limit == nil || *payload.Data.Limit == "" {
limit = "20"
} else {
limit = *payload.Limit
limit = *payload.Data.Limit
}
var offset string
if payload.Offset == nil || *payload.Offset == "" {
if payload.Data.Offset == nil || *payload.Data.Offset == "" {
exception := new(exception.Builder).
SetStatus(exception.StatusUser).
SetService(exception.ServiceEvent).
@@ -46,9 +53,10 @@ func (self *EventServiceImpl) ListEvents(payload *EventListPayload) (result *Eve
Data: nil,
}
} else {
offset = *payload.Offset
offset = *payload.Data.Offset
}
// 3. 转换数字
limitNum, err := strconv.Atoi(limit)
if err != nil {
exc := new(exception.Builder).
@@ -110,6 +118,44 @@ func (self *EventServiceImpl) ListEvents(payload *EventListPayload) (result *Eve
}
}
if eventList != nil && len(*eventList) > 0 {
var eventIds []uuid.UUID
for _, e := range *eventList {
parsedId, parseErr := uuid.Parse(e.EventId)
if parseErr == nil {
eventIds = append(eventIds, parsedId)
}
}
joinedMap, err := new(data.Attendance).GetJoinedEventIDs(payload.Context, payload.UserId, eventIds)
if err != nil {
exc := new(exception.Builder).
SetStatus(exception.StatusServer).
SetService(exception.ServiceEvent).
SetEndpoint(exception.EndpointEventServiceList).
SetType(exception.TypeCommon).
SetOriginal(exception.CommonErrorDatabase).
SetError(err).
Throw(payload.Context)
return &EventListResult{
Common: shared.CommonResult{
HttpCode: 500,
Exception: exc,
},
Data: nil,
}
}
for i := range *eventList {
currentIdStr := (*eventList)[i].EventId
currentIdUuid, _ := uuid.Parse(currentIdStr)
(*eventList)[i].IsJoined = joinedMap[currentIdUuid]
}
}
successExc := new(exception.Builder).
SetStatus(exception.StatusSuccess).
SetService(exception.ServiceEvent).