Skip to content

Commit

Permalink
複数のDB gatewayを追加
Browse files Browse the repository at this point in the history
  • Loading branch information
Shugo Kawamura committed Aug 4, 2023
1 parent 8a49090 commit 2a8f969
Show file tree
Hide file tree
Showing 32 changed files with 1,518 additions and 490 deletions.
107 changes: 107 additions & 0 deletions backend/entity/entity.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
package entity

import "time"

type User struct {
ID int64
SteamID string
Name string
Admin bool
}

type GameServer struct {
UserID int64
ID int64
Ip string
Port int32
RCONPassword string
InUse bool
DisplayName string
IsPublic bool
}

type Match struct {
ID int64
UserID int64
ServerID int64
Team1ID int64
Team2ID int64
Winner *int64
Cancelled bool
StartTime *time.Time
EndTime *time.Time
MaxMaps int32
Title string
SkipVeto bool
APIKey string
Team1Score int32
Team2Score int32
Forfeit *bool
}

type MapStats struct {
ID int64
MatchID int64
MapNumber int64
MapName string
StartTime time.Time
EndTime time.Time
Winner int64
Team1Score int64
Team2Score int64
}

type PlayerStats struct {
ID int64
MatchID int64
MapID int64
TeamID int64
SteamID string
Name string

Kills int64
Assists int64
Deaths int64

RoundsPlayed int64
FlashbangAssists int64
TeamKills int64
Suicides int64
HeadShotKills int64
Damage int64
BombPlants int64
BombDefuses int64

V1 int64
V2 int64
V3 int64
V4 int64
V5 int64
K1 int64
K2 int64
K3 int64
K4 int64
K5 int64

FirstDeathCT int64
FirstDeathT int64
FirstKillCT int64
FirstKillT int64
}

type Team struct {
ID int64
UserID int64
Name string
Flag string
Tag string
Logo string
PublicTeam bool
}

type Player struct {
ID int64
SteamID string
Name string
TeanID int64
}
46 changes: 46 additions & 0 deletions backend/gateway/database/interface.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package database

import (
"context"
"time"

"github.com/FlowingSPDG/get5-web-go/backend/entity"
)

type UsersRepositry interface {
CreateUser(ctx context.Context, steamID string, name string, admin bool) (*entity.User, error)
GetUser(ctx context.Context, id int64) (*entity.User, error)
}

type GameServerRepository interface {
AddGameServer(ctx context.Context, userID int64, ip string, port int32, rconPassword string, displayName string, isPublic bool) (*entity.GameServer, error)
GetGameServer(ctx context.Context, id int64) (*entity.GameServer, error)
GetPublicGameServers(ctx context.Context) ([]*entity.GameServer, error)
GetGameServersByUser(ctx context.Context, userID int64) ([]*entity.GameServer, error)
DeleteGameServer(ctx context.Context, id int64) error
}

type MatchRepository interface {
AddMatch(ctx context.Context, userID int64, serverID int64, team1ID int64, team2ID int64, startTime time.Time, endTime time.Time, maxMaps int32, title string, skipVeto bool, apiKey string) (*entity.Match, error)
GetMatch(ctx context.Context, id int64) (*entity.Match, error)
GetMatchesByUser(ctx context.Context, userID int64) ([]*entity.Match, error)
GetMatchesByTeam(ctx context.Context, teamID int64) ([]*entity.Match, error)
GetMatchesByWinner(ctx context.Context, teamID int64) ([]*entity.Match, error)
UpdateMatchWinner(ctx context.Context, matchID int64, winnerID int64) error
UpdateTeam1Score(ctx context.Context, matchID int64, score int32) error
UpdateTeam2Score(ctx context.Context, matchID int64, score int32) error
CancelMatch(ctx context.Context, matchID int64) error
StartMatch(ctx context.Context, matchID int64) error
}

type MapStatsRepository interface {
}

type PlayerStatsRepository interface {
}

type TeamRepository interface {
}

type PlayerRepository interface {
}
171 changes: 171 additions & 0 deletions backend/gateway/database/mysql/gameservers/gameservers.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,171 @@
package gameservers

import (
"context"
"database/sql"

"github.com/FlowingSPDG/get5-web-go/backend/entity"
"github.com/FlowingSPDG/get5-web-go/backend/gateway/database"
gameservers_gen "github.com/FlowingSPDG/get5-web-go/backend/gateway/database/mysql/gameservers/generated"
)

type gameServerRepository struct {
dsn string
}

func NewGameServerRepository(dsn string) database.GameServerRepository {
return &gameServerRepository{
dsn: dsn,
}
}

func (gsr *gameServerRepository) Open() (*sql.DB, error) {
return sql.Open("mysql", gsr.dsn)
}

// AddGameServer implements database.GameServerRepository.
func (gr *gameServerRepository) AddGameServer(ctx context.Context, userID int64, ip string, port int32, rconPassword string, displayName string, isPublic bool) (*entity.GameServer, error) {
db, err := gr.Open()
if err != nil {
return nil, err
}
defer db.Close()

queries := gameservers_gen.New(db)

result, err := queries.AddGameServer(ctx, gameservers_gen.AddGameServerParams{
UserID: userID,
Ip: ip,
Port: port,
RconPassword: rconPassword,
DisplayName: displayName,
IsPublic: isPublic,
})
if err != nil {
return nil, err
}

insertedID, err := result.LastInsertId()
if err != nil {
return nil, err
}

gameserver, err := queries.GetGameServers(ctx, insertedID)
if err != nil {
return nil, err
}

return &entity.GameServer{
ID: gameserver.ID,
UserID: gameserver.UserID,
Ip: gameserver.Ip,
Port: gameserver.Port,
RCONPassword: gameserver.RconPassword,
DisplayName: gameserver.DisplayName,
IsPublic: gameserver.IsPublic,
}, nil
}

// DeleteGameServer implements database.GameServerRepository.
func (gr *gameServerRepository) DeleteGameServer(ctx context.Context, id int64) error {
db, err := gr.Open()
if err != nil {
return err
}
defer db.Close()

queries := gameservers_gen.New(db)

if _, err := queries.DeleteGameServer(ctx, id); err != nil {
return err
}
return nil
}

// GetGameServer implements database.GameServerRepository.
func (gr *gameServerRepository) GetGameServer(ctx context.Context, id int64) (*entity.GameServer, error) {
db, err := gr.Open()
if err != nil {
return nil, err
}
defer db.Close()

queries := gameservers_gen.New(db)

gameserver, err := queries.GetGameServers(ctx, id)
if err != nil {
return nil, err
}

return &entity.GameServer{
ID: gameserver.ID,
UserID: gameserver.UserID,
Ip: gameserver.Ip,
Port: gameserver.Port,
RCONPassword: gameserver.RconPassword,
DisplayName: gameserver.DisplayName,
IsPublic: gameserver.IsPublic,
}, nil
}

// GetGameServersByUser implements database.GameServerRepository.
func (gr *gameServerRepository) GetGameServersByUser(ctx context.Context, userID int64) ([]*entity.GameServer, error) {
db, err := gr.Open()
if err != nil {
return nil, err
}
defer db.Close()

queries := gameservers_gen.New(db)

gameservers, err := queries.GetGameServersByUser(ctx, userID)
if err != nil {
return nil, err
}

ret := make([]*entity.GameServer, 0, len(gameservers))
for _, gameserver := range gameservers {
ret = append(ret, &entity.GameServer{
ID: gameserver.ID,
UserID: gameserver.UserID,
Ip: gameserver.Ip,
Port: gameserver.Port,
RCONPassword: gameserver.RconPassword,
DisplayName: gameserver.DisplayName,
IsPublic: gameserver.IsPublic,
})
}

return ret, nil
}

// GetPublicGameServers implements database.GameServerRepository.
func (gr *gameServerRepository) GetPublicGameServers(ctx context.Context) ([]*entity.GameServer, error) {
db, err := gr.Open()
if err != nil {
return nil, err
}
defer db.Close()

queries := gameservers_gen.New(db)

gameservers, err := queries.GetPublicGameServers(ctx)
if err != nil {
return nil, err
}

ret := make([]*entity.GameServer, 0, len(gameservers))
for _, gameserver := range gameservers {
ret = append(ret, &entity.GameServer{
ID: gameserver.ID,
UserID: gameserver.UserID,
Ip: gameserver.Ip,
Port: gameserver.Port,
RCONPassword: gameserver.RconPassword,
DisplayName: gameserver.DisplayName,
IsPublic: gameserver.IsPublic,
})
}

return ret, nil
}
31 changes: 31 additions & 0 deletions backend/gateway/database/mysql/gameservers/generated/db.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit 2a8f969

Please sign in to comment.