All checks were successful
Server CI/CD / deploy (push) Successful in 1m34s
MMO 서버/데디케이트 서버 연동을 위한 내부 API 엔드포인트 구현: - POST /api/internal/bossraid/entry — 파티 입장 요청 (방 생성) - POST /api/internal/bossraid/start — 세션 시작 보고 - POST /api/internal/bossraid/complete — 클리어 보고 + TOL Chain 보상 지급 - POST /api/internal/bossraid/fail — 실패 보고 - GET /api/internal/bossraid/room — 방 조회 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
40 lines
955 B
Go
40 lines
955 B
Go
package bossraid
|
|
|
|
import "gorm.io/gorm"
|
|
|
|
type Repository struct {
|
|
db *gorm.DB
|
|
}
|
|
|
|
func NewRepository(db *gorm.DB) *Repository {
|
|
return &Repository{db: db}
|
|
}
|
|
|
|
func (r *Repository) Create(room *BossRoom) error {
|
|
return r.db.Create(room).Error
|
|
}
|
|
|
|
func (r *Repository) Update(room *BossRoom) error {
|
|
return r.db.Save(room).Error
|
|
}
|
|
|
|
func (r *Repository) FindBySessionName(sessionName string) (*BossRoom, error) {
|
|
var room BossRoom
|
|
if err := r.db.Where("session_name = ?", sessionName).First(&room).Error; err != nil {
|
|
return nil, err
|
|
}
|
|
return &room, nil
|
|
}
|
|
|
|
// CountActiveByUsername checks if a player is already in an active boss raid.
|
|
func (r *Repository) CountActiveByUsername(username string) (int64, error) {
|
|
var count int64
|
|
search := `"` + username + `"`
|
|
err := r.db.Model(&BossRoom{}).
|
|
Where("status IN ? AND players LIKE ?",
|
|
[]RoomStatus{StatusWaiting, StatusInProgress},
|
|
"%"+search+"%",
|
|
).Count(&count).Error
|
|
return count, err
|
|
}
|