-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Shugo Kawamura
committed
Aug 4, 2023
1 parent
8a49090
commit 2a8f969
Showing
32 changed files
with
1,518 additions
and
490 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
171
backend/gateway/database/mysql/gameservers/gameservers.go
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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
31
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.
Oops, something went wrong.
Oops, something went wrong.