97 lines
4.2 KiB
Go
97 lines
4.2 KiB
Go
package v1
|
||
|
||
import "github.com/gogf/gf/v2/frame/g"
|
||
|
||
// ============================================================================
|
||
// 小程序端「年会」公开接口(免登录:/event/info、/event/seat/query)
|
||
// 依据:架构 §5.1 E1/E2、§5.3 骨架、§4.4 图④;PRD-02 §4.2.3 隐私边界。
|
||
//
|
||
// 结果最小化红线:返回体**只含本人**的桌号/桌名/座位号,以及「本人所在桌」的示意
|
||
// (各座位是否有人,但**不含任何他人姓名/手机号/全厅名单/统计**)。SeatCell 刻意只有
|
||
// seat_no / is_self / filled 三个字段。
|
||
// ============================================================================
|
||
|
||
// SeatCell 仅用于「本人所在桌」示意 —— 只含座位号与是否本人,不含任何他人信息
|
||
type SeatCell struct {
|
||
SeatNo int `json:"seat_no"`
|
||
IsSelf bool `json:"is_self"`
|
||
Filled bool `json:"filled"` // 是否有人(不返回是谁)
|
||
}
|
||
|
||
type StageOut struct {
|
||
X int `json:"x"`
|
||
Y int `json:"y"`
|
||
W int `json:"w"`
|
||
H int `json:"h"`
|
||
Shape string `json:"shape"`
|
||
Rotation int `json:"rotation"`
|
||
Color string `json:"color"`
|
||
}
|
||
|
||
type EventInfoReq struct {
|
||
g.Meta `path:"/event/info" method:"get" tags:"event" summary:"活动公开信息(查座页顶部)"`
|
||
EventId int64 `v:"required#活动不存在" json:"event_id"`
|
||
}
|
||
type EventInfoRes struct {
|
||
Title string `json:"title"`
|
||
Venue string `json:"venue"`
|
||
EventTime string `json:"event_time"`
|
||
Status string `json:"status"`
|
||
CanQuery bool `json:"can_query"` // status==published
|
||
Stage *StageOut `json:"stage"` // 用于定位,不含个人信息
|
||
}
|
||
|
||
// EventSeatQueryReq 姓名 + 手机号双因子精确匹配(都填且都对才返回)
|
||
type EventSeatQueryReq struct {
|
||
g.Meta `path:"/event/seat/query" method:"post" tags:"event" summary:"扫码查座(免登录)"`
|
||
EventId int64 `v:"required#活动不存在" json:"event_id"`
|
||
Name string `json:"name"`
|
||
Phone string `json:"phone"`
|
||
}
|
||
|
||
// EventSeatQueryRes 结果最小化:只有本人桌座 + 本人所在桌示意。
|
||
//
|
||
// Found=false 表示未查询到(双因子不匹配/未录入/未分配座位),message 为统一模糊文案,
|
||
// 前端据 Found 判定;找不到时所有桌座字段为空,不透出任何他人信息。
|
||
type EventSeatQueryRes struct {
|
||
Found bool `json:"found"`
|
||
Message string `json:"message"`
|
||
TableNo string `json:"table_no"`
|
||
TableName string `json:"table_name"`
|
||
SeatNo int `json:"seat_no"`
|
||
Capacity int `json:"capacity"`
|
||
Seats []SeatCell `json:"seats"` // 本人所在桌,按座位号;Filled 不含身份
|
||
Stage *StageOut `json:"stage"`
|
||
// 本人桌圆心 x(大厅逻辑坐标系)。**仅 Found=true 时有意义,未命中为 0**。
|
||
TableX int `json:"table_x"`
|
||
// 本人桌圆心 y(大厅逻辑坐标系)。**仅 Found=true 时有意义,未命中为 0**。
|
||
TableY int `json:"table_y"`
|
||
// 大厅逻辑宽(取自 hall_layout.canvas.w,缺省 1600)。**仅 Found=true 时有意义,未命中为 0**。
|
||
HallW int `json:"hall_w"`
|
||
// 大厅逻辑高(取自 hall_layout.canvas.h,缺省 1200)。**仅 Found=true 时有意义,未命中为 0**。
|
||
HallH int `json:"hall_h"`
|
||
}
|
||
|
||
// ============================================================================
|
||
// 公开「可查询活动列表」(N4-A / E-list,免登录)
|
||
//
|
||
// 只返回已发布(can_query=true)的活动,仅暴露最小字段(event_id / title / venue / event_time);
|
||
// 无已发布活动 → {list:[]}(**非报错**,前端据此渲染空态);草稿 / 已结束**不出现**。
|
||
// ============================================================================
|
||
|
||
// EventPublicItem 公开活动条目(最小字段,不含任何组织/名单信息)
|
||
type EventPublicItem struct {
|
||
EventId int64 `json:"event_id"`
|
||
Title string `json:"title"`
|
||
Venue string `json:"venue"`
|
||
EventTime string `json:"event_time"`
|
||
}
|
||
|
||
// EventPublicListReq 公开可查询活动列表
|
||
type EventPublicListReq struct {
|
||
g.Meta `path:"/event/list" method:"get" tags:"event" summary:"公开可查询活动列表"`
|
||
}
|
||
type EventPublicListRes struct {
|
||
List []EventPublicItem `json:"list"`
|
||
}
|