diff options
| author | William Hergès <anhgelus.morhtuuzh@proton.me> | 2025-05-13 21:13:59 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-13 21:13:59 +0200 |
| commit | 8d6af4b6aa8f4902316c7f30c5229c97b0ec1a81 (patch) | |
| tree | d19607355cfa0a180d3269d78e7e2249aa3d2277 /user/member.go | |
| parent | 9e826eee980634b82d6981a868b045f3d4b48852 (diff) | |
| parent | 75ca960199b85f3f4b491652c837d297827e40ce (diff) | |
Merge pull request #8 from anhgelus/v3
V3
Diffstat (limited to 'user/member.go')
| -rw-r--r-- | user/member.go | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/user/member.go b/user/member.go new file mode 100644 index 0000000..71a369b --- /dev/null +++ b/user/member.go @@ -0,0 +1,69 @@ +package user + +import ( + "fmt" + "github.com/anhgelus/gokord" + "github.com/anhgelus/gokord/utils" + "time" +) + +type Copaing struct { + ID uint `gorm:"primarykey"` + DiscordID string `gorm:"not null"` + CopaingXPs []CopaingXP `gorm:"constraint:OnDelete:SET NULL;"` + GuildID string `gorm:"not null"` +} + +type CopaingXP struct { + ID uint `gorm:"primarykey"` + XP uint `gorm:"default:0"` + CopaingID uint + GuildID string `gorm:"not null;"` + CreatedAt time.Time +} + +type CopaingAccess interface { + ToCopaing() *Copaing + GetXP() uint +} + +const ( + LastEvent = "last_event" + AlreadyRemoved = "already_removed" +) + +func GetCopaing(discordID string, guildID string) *Copaing { + c := Copaing{DiscordID: discordID, GuildID: guildID} + if err := c.Load(); err != nil { + utils.SendAlert( + "user/member.go - Loading user", + err.Error(), + "discord_id", + discordID, + "guild_id", + guildID, + ) + return nil + } + return &c +} + +func (c *Copaing) Load() error { + return gokord.DB. + Where("discord_id = ? and guild_id = ?", c.DiscordID, c.GuildID). + Preload("CopaingXPs"). + FirstOrCreate(c). + Error +} + +func (c *Copaing) Save() error { + return gokord.DB.Save(c).Error +} + +func (c *Copaing) GenKey(key string) string { + return fmt.Sprintf("%s:%s:%s", c.GuildID, c.DiscordID, key) +} + +func (c *Copaing) Delete() error { + return gokord.DB.Where("guild_id = ? AND discord_id = ?", c.GuildID, c.DiscordID).Delete(c).Error +} |
