change to GORM, add member and rank handlers
This commit is contained in:
219
api/db/member.go
Normal file
219
api/db/member.go
Normal file
@@ -0,0 +1,219 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/labstack/echo/v4"
|
||||
"gopkg.in/guregu/null.v3"
|
||||
)
|
||||
|
||||
/*
|
||||
|
||||
DDL
|
||||
|
||||
CREATE TABLE `members` (
|
||||
`id` int(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(100) NOT NULL,
|
||||
`timezone` varchar(5) DEFAULT NULL,
|
||||
`email` varchar(100) DEFAULT NULL,
|
||||
`website` varchar(240) DEFAULT NULL,
|
||||
`guilded_id` varchar(10) DEFAULT NULL,
|
||||
`steam_id_64` varchar(17) DEFAULT NULL,
|
||||
`teamspeak_uid` varchar(32) DEFAULT NULL,
|
||||
`steam_profile_name` varchar(32) DEFAULT NULL,
|
||||
`discord_id` varchar(20) DEFAULT NULL,
|
||||
`discord_username` varchar(32) DEFAULT NULL,
|
||||
`aliases` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`aliases`)),
|
||||
`created_at` datetime NOT NULL DEFAULT current_timestamp(),
|
||||
`updated_at` datetime NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
`deleted` tinyint(4) DEFAULT NULL,
|
||||
`remarks` text DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `name` (`name`),
|
||||
UNIQUE KEY `steamId64` (`steam_id_64`) USING BTREE,
|
||||
UNIQUE KEY `discordId` (`discord_id`) USING BTREE,
|
||||
UNIQUE KEY `guilded_id` (`guilded_id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=186 DEFAULT CHARSET=utf8mb4;
|
||||
*/
|
||||
|
||||
// Member is a struct that represents a member
|
||||
type Member struct {
|
||||
ObjectBase
|
||||
Name string `json:"name"`
|
||||
Company null.String `json:"company"`
|
||||
Timezone null.String `json:"timezone"`
|
||||
Email null.String `json:"email"`
|
||||
Website null.String `json:"website"`
|
||||
GuildedID null.String `json:"guilded_id"`
|
||||
SteamID64 null.String `json:"steam_id_64"`
|
||||
TeamspeakUID null.String `json:"teamspeak_uid"`
|
||||
SteamProfileName null.String `json:"steam_profile_name"`
|
||||
DiscordID null.String `json:"discord_id"`
|
||||
DiscordUsername null.String `json:"discord_username"`
|
||||
Aliases null.String `json:"aliases"`
|
||||
Remarks null.String `json:"remarks"`
|
||||
|
||||
Rank Rank `json:"rank" gorm:"references:ID; foreignkey:RankID"`
|
||||
RankID int `json:"rank_id"`
|
||||
Awards []Award `json:"awards" gorm:"many2many:member_awards;"`
|
||||
}
|
||||
|
||||
// Get one by id
|
||||
func (m *Member) GetByID(ctx context.Context, id int) error {
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.WithContext(ctx).First(m, id).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get all
|
||||
func (m *Member) GetAll(ctx context.Context) ([]Member, error) {
|
||||
var members []Member
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Search by provided struct
|
||||
err = db.WithContext(ctx).
|
||||
Model(m).Where(m).Find(&members).Error
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return members, nil
|
||||
}
|
||||
|
||||
// Create a new member
|
||||
func (m *Member) Create(ctx context.Context, c echo.Context) error {
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.WithContext(ctx).Create(m).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Update a member
|
||||
func (m *Member) Update(ctx context.Context, c echo.Context) error {
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.WithContext(ctx).Save(m).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Delete a member
|
||||
func (m *Member) Delete(ctx context.Context, c echo.Context) error {
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.WithContext(ctx).Delete(m).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get by name
|
||||
func (m *Member) GetByName(ctx context.Context, name string) error {
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.WithContext(ctx).Where("name = ?", name).First(m).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get by steam id
|
||||
func (m *Member) GetBySteamID(ctx context.Context, steamID string) error {
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.WithContext(ctx).Where("steam_id_64 = ?", steamID).First(m).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get by discord id
|
||||
func (m *Member) GetByDiscordID(ctx context.Context, discordID string) error {
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.WithContext(ctx).Where("discord_id = ?", discordID).First(m).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get by guilded id
|
||||
func (m *Member) GetByGuildedID(ctx context.Context, guildedID string) error {
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.WithContext(ctx).Where("guilded_id = ?", guildedID).First(m).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get by teamspeak uid
|
||||
func (m *Member) GetByTeamspeakUID(ctx context.Context, teamspeakUID string) error {
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.WithContext(ctx).Where("teamspeak_uid = ?", teamspeakUID).First(m).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get by email
|
||||
func (m *Member) GetByEmail(ctx context.Context, email string) error {
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = db.WithContext(ctx).Where("email = ?", email).First(m).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Get awards a member has
|
||||
func (m *Member) GetAwards(ctx context.Context) ([]Award, error) {
|
||||
db, err := GetDB()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
err = db.WithContext(ctx).Model(m).Association("Awards").Find(&m.Awards)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return m.Awards, nil
|
||||
}
|
||||
Reference in New Issue
Block a user