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 }