we are sending all conquers in one message | refactor | add find_lang_version_by_tag | bump github.com/tribalwarshelp/shared and golang-sdk
This commit is contained in:
parent
450f36a80f
commit
d4c518749e
|
@ -5,6 +5,7 @@ import (
|
||||||
"log"
|
"log"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/pkg/errors"
|
||||||
shared_models "github.com/tribalwarshelp/shared/models"
|
shared_models "github.com/tribalwarshelp/shared/models"
|
||||||
|
|
||||||
"github.com/tribalwarshelp/dcbot/discord"
|
"github.com/tribalwarshelp/dcbot/discord"
|
||||||
|
@ -62,7 +63,7 @@ func (h *handler) loadEnnoblements(servers []string) map[string]ennoblements {
|
||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *handler) loadLangVersions(servers []string) map[shared_models.LanguageTag]*shared_models.LangVersion {
|
func (h *handler) loadLangVersions(servers []string) ([]*shared_models.LangVersion, error) {
|
||||||
languageTags := []shared_models.LanguageTag{}
|
languageTags := []shared_models.LanguageTag{}
|
||||||
cache := make(map[shared_models.LanguageTag]bool)
|
cache := make(map[shared_models.LanguageTag]bool)
|
||||||
for _, server := range servers {
|
for _, server := range servers {
|
||||||
|
@ -73,19 +74,14 @@ func (h *handler) loadLangVersions(servers []string) map[shared_models.LanguageT
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
langVersions := make(map[shared_models.LanguageTag]*shared_models.LangVersion)
|
langVersionList, err := h.api.LangVersions.Browse(&shared_models.LangVersionFilter{
|
||||||
langVersionsList, err := h.api.LangVersions.Browse(&shared_models.LangVersionFilter{
|
|
||||||
Tag: languageTags,
|
Tag: languageTags,
|
||||||
})
|
})
|
||||||
if err == nil {
|
if err != nil {
|
||||||
for _, langVersion := range langVersionsList.Items {
|
return nil, errors.Wrap(err, "Cannot load lang versions")
|
||||||
langVersions[langVersion.Tag] = langVersion
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
log.Printf("Cannot load lang versions: %s", err.Error())
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return langVersions
|
return langVersionList.Items, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h *handler) checkLastEnnoblements() {
|
func (h *handler) checkLastEnnoblements() {
|
||||||
|
@ -105,7 +101,11 @@ func (h *handler) checkLastEnnoblements() {
|
||||||
}
|
}
|
||||||
log.Print("checkLastEnnoblements: number of loaded groups: ", total)
|
log.Print("checkLastEnnoblements: number of loaded groups: ", total)
|
||||||
|
|
||||||
langVersions := h.loadLangVersions(servers)
|
langVersions, err := h.loadLangVersions(servers)
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
ennoblementsByServerKey := h.loadEnnoblements(servers)
|
ennoblementsByServerKey := h.loadEnnoblements(servers)
|
||||||
|
|
||||||
for _, group := range groups {
|
for _, group := range groups {
|
||||||
|
@ -114,9 +114,10 @@ func (h *handler) checkLastEnnoblements() {
|
||||||
}
|
}
|
||||||
for _, observation := range group.Observations {
|
for _, observation := range group.Observations {
|
||||||
ennoblements, ok := ennoblementsByServerKey[observation.Server]
|
ennoblements, ok := ennoblementsByServerKey[observation.Server]
|
||||||
langVersion, ok2 := langVersions[utils.LanguageTagFromWorldName(observation.Server)]
|
langVersion := utils.FindLangVersionByTag(langVersions, utils.LanguageTagFromWorldName(observation.Server))
|
||||||
if ok && ok2 {
|
if ok && langVersion != nil && langVersion.Host != "" {
|
||||||
if group.LostVillagesChannelID != "" {
|
if group.LostVillagesChannelID != "" {
|
||||||
|
msg := &discord.EmbedMessage{}
|
||||||
for _, ennoblement := range ennoblements.getLostVillagesByTribe(observation.TribeID) {
|
for _, ennoblement := range ennoblements.getLostVillagesByTribe(observation.TribeID) {
|
||||||
if !isPlayerTribeNil(ennoblement.NewOwner) &&
|
if !isPlayerTribeNil(ennoblement.NewOwner) &&
|
||||||
group.Observations.Contains(observation.Server, ennoblement.NewOwner.Tribe.ID) {
|
group.Observations.Contains(observation.Server, ennoblement.NewOwner.Tribe.ID) {
|
||||||
|
@ -128,12 +129,22 @@ func (h *handler) checkLastEnnoblements() {
|
||||||
ennoblement: ennoblement,
|
ennoblement: ennoblement,
|
||||||
t: messageTypeLost,
|
t: messageTypeLost,
|
||||||
}
|
}
|
||||||
msg := newMessage(newMsgDataConfig)
|
msg.Append(newMessage(newMsgDataConfig).String())
|
||||||
h.discord.SendEmbed(group.LostVillagesChannelID, msg.toEmbed())
|
}
|
||||||
|
if !msg.IsEmpty() {
|
||||||
|
h.discord.SendEmbed(group.LostVillagesChannelID,
|
||||||
|
discord.
|
||||||
|
NewEmbed().
|
||||||
|
SetTitle("Stracone wioski").
|
||||||
|
SetColor(colorLostVillage).
|
||||||
|
SetFields(msg.ToMessageEmbedFields()).
|
||||||
|
SetTimestamp(formatDateOfConquest(time.Now())).
|
||||||
|
MessageEmbed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if group.ConqueredVillagesChannelID != "" {
|
if group.ConqueredVillagesChannelID != "" {
|
||||||
|
msg := &discord.EmbedMessage{}
|
||||||
for _, ennoblement := range ennoblements.getConqueredVillagesByTribe(observation.TribeID) {
|
for _, ennoblement := range ennoblements.getConqueredVillagesByTribe(observation.TribeID) {
|
||||||
if !isPlayerTribeNil(ennoblement.OldOwner) &&
|
if !isPlayerTribeNil(ennoblement.OldOwner) &&
|
||||||
group.Observations.Contains(observation.Server, ennoblement.OldOwner.Tribe.ID) {
|
group.Observations.Contains(observation.Server, ennoblement.OldOwner.Tribe.ID) {
|
||||||
|
@ -145,8 +156,17 @@ func (h *handler) checkLastEnnoblements() {
|
||||||
ennoblement: ennoblement,
|
ennoblement: ennoblement,
|
||||||
t: messageTypeConquer,
|
t: messageTypeConquer,
|
||||||
}
|
}
|
||||||
msg := newMessage(newMsgDataConfig)
|
msg.Append(newMessage(newMsgDataConfig).String())
|
||||||
h.discord.SendEmbed(group.ConqueredVillagesChannelID, msg.toEmbed())
|
}
|
||||||
|
if !msg.IsEmpty() {
|
||||||
|
h.discord.SendEmbed(group.ConqueredVillagesChannelID,
|
||||||
|
discord.
|
||||||
|
NewEmbed().
|
||||||
|
SetTitle("Podbite wioski").
|
||||||
|
SetColor(colorConqueredVillage).
|
||||||
|
SetFields(msg.ToMessageEmbedFields()).
|
||||||
|
SetTimestamp(formatDateOfConquest(time.Now())).
|
||||||
|
MessageEmbed)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,13 +98,20 @@ func (msg message) formatMsgAboutVillageConquest() string {
|
||||||
formatMsgLink(msg.oldOwnerTribeTag, msg.oldOwnerTribeURL))
|
formatMsgLink(msg.oldOwnerTribeTag, msg.oldOwnerTribeURL))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (msg message) String() string {
|
||||||
|
fieldContent := msg.formatMsgAboutVillageConquest()
|
||||||
|
if msg.t == messageTypeLost {
|
||||||
|
fieldContent = msg.formatMsgAboutVillageLost()
|
||||||
|
}
|
||||||
|
return fieldContent + "\n"
|
||||||
|
}
|
||||||
|
|
||||||
func (msg message) toEmbed() *discordgo.MessageEmbed {
|
func (msg message) toEmbed() *discordgo.MessageEmbed {
|
||||||
title := "Podbita wioska"
|
title := "Podbita wioska"
|
||||||
fieldContent := msg.formatMsgAboutVillageConquest()
|
fieldContent := msg.String()
|
||||||
color := colorConqueredVillage
|
color := colorConqueredVillage
|
||||||
if msg.t == messageTypeLost {
|
if msg.t == messageTypeLost {
|
||||||
title = "Stracona wioska"
|
title = "Stracona wioska"
|
||||||
fieldContent = msg.formatMsgAboutVillageLost()
|
|
||||||
color = colorLostVillage
|
color = colorLostVillage
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ import (
|
||||||
|
|
||||||
"github.com/bwmarrin/discordgo"
|
"github.com/bwmarrin/discordgo"
|
||||||
"github.com/tribalwarshelp/dcbot/models"
|
"github.com/tribalwarshelp/dcbot/models"
|
||||||
|
"github.com/tribalwarshelp/dcbot/utils"
|
||||||
shared_models "github.com/tribalwarshelp/shared/models"
|
shared_models "github.com/tribalwarshelp/shared/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -467,32 +468,75 @@ func (s *Session) handleObservationsCommand(m *discordgo.MessageCreate, args ...
|
||||||
m.Author.Mention()))
|
m.Author.Mention()))
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
group, err := s.cfg.GroupRepository.GetByID(context.Background(), groupID)
|
group, err := s.cfg.GroupRepository.GetByID(context.Background(), groupID)
|
||||||
if err != nil || group.ServerID != m.GuildID {
|
if err != nil || group.ServerID != m.GuildID {
|
||||||
s.SendMessage(m.ChannelID, m.Author.Mention()+` Nie znaleziono grupy.`)
|
s.SendMessage(m.ChannelID, m.Author.Mention()+` Nie znaleziono grupy.`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
observations, _, err := s.cfg.ObservationRepository.Fetch(context.Background(), &models.ObservationFilter{
|
observations, _, err := s.cfg.ObservationRepository.Fetch(context.Background(), &models.ObservationFilter{
|
||||||
GroupID: []int{groupID},
|
GroupID: []int{groupID},
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
s.SendMessage(m.ChannelID, m.Author.Mention()+` Wystąpił błąd wewnętrzny, prosimy spróbować później.`)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
msg := ""
|
tribeIDsByServer := make(map[string][]int)
|
||||||
|
observationIndexByTribeID := make(map[int]int)
|
||||||
|
langTags := []shared_models.LanguageTag{}
|
||||||
for i, observation := range observations {
|
for i, observation := range observations {
|
||||||
msg += fmt.Sprintf("**%d** | %d - %s - %d\n", i+1, observation.ID, observation.Server, observation.TribeID)
|
tribeIDsByServer[observation.Server] = append(tribeIDsByServer[observation.Server], observation.TribeID)
|
||||||
|
observationIndexByTribeID[observation.TribeID] = i
|
||||||
|
currentLangTag := utils.LanguageTagFromWorldName(observation.Server)
|
||||||
|
unique := true
|
||||||
|
for _, langTag := range langTags {
|
||||||
|
if langTag == currentLangTag {
|
||||||
|
unique = false
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if unique {
|
||||||
|
langTags = append(langTags, currentLangTag)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
for server, tribeIDs := range tribeIDsByServer {
|
||||||
if msg == "" {
|
list, err := s.cfg.API.Tribes.Browse(server, &shared_models.TribeFilter{
|
||||||
msg = "Brak dodanych obserwacji do tej grupy"
|
ID: tribeIDs,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
s.SendMessage(m.ChannelID, m.Author.Mention()+` Wystąpił błąd wewnętrzny, prosimy spróbować później.`)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
for _, tribe := range list.Items {
|
||||||
|
observations[observationIndexByTribeID[tribe.ID]].Tribe = tribe
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
langVersionList, err := s.cfg.API.LangVersions.Browse(&shared_models.LangVersionFilter{
|
||||||
|
Tag: langTags,
|
||||||
|
})
|
||||||
|
|
||||||
|
msg := &EmbedMessage{}
|
||||||
|
if len(observations) <= 0 {
|
||||||
|
msg.Append("Brak")
|
||||||
|
}
|
||||||
|
for i, observation := range observations {
|
||||||
|
tag := "Unknown"
|
||||||
|
if observation.Tribe != nil {
|
||||||
|
tag = observation.Tribe.Tag
|
||||||
|
}
|
||||||
|
lv := utils.FindLangVersionByTag(langVersionList.Items, utils.LanguageTagFromWorldName(observation.Server))
|
||||||
|
tribeURL := ""
|
||||||
|
if lv != nil {
|
||||||
|
tribeURL = utils.FormatTribeURL(observation.Server, lv.Host, observation.TribeID)
|
||||||
|
}
|
||||||
|
msg.Append(fmt.Sprintf("**%d** | %d - %s - [``%s``](%s)\n", i+1, observation.ID,
|
||||||
|
observation.Server,
|
||||||
|
tag,
|
||||||
|
tribeURL))
|
||||||
|
}
|
||||||
s.SendEmbed(m.ChannelID, NewEmbed().
|
s.SendEmbed(m.ChannelID, NewEmbed().
|
||||||
SetTitle("Lista obserwowanych plemion").
|
SetTitle("Lista obserwowanych plemion\nIndeks | ID - Serwer - Plemię").
|
||||||
AddField("Indeks | ID - Serwer - ID plemienia", msg).
|
SetFields(msg.ToMessageEmbedFields()).
|
||||||
SetFooter("Strona 1 z 1").
|
SetFooter("Strona 1 z 1").
|
||||||
MessageEmbed)
|
MessageEmbed)
|
||||||
}
|
}
|
||||||
|
|
|
@ -258,6 +258,10 @@ type EmbedMessage struct {
|
||||||
mutex sync.Mutex
|
mutex sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (msg *EmbedMessage) IsEmpty() bool {
|
||||||
|
return len(msg.Chunks) == 0
|
||||||
|
}
|
||||||
|
|
||||||
func (msg *EmbedMessage) Append(m string) {
|
func (msg *EmbedMessage) Append(m string) {
|
||||||
msg.mutex.Lock()
|
msg.mutex.Lock()
|
||||||
defer msg.mutex.Unlock()
|
defer msg.mutex.Unlock()
|
||||||
|
|
4
go.mod
4
go.mod
|
@ -9,7 +9,7 @@ require (
|
||||||
github.com/pkg/errors v0.9.1
|
github.com/pkg/errors v0.9.1
|
||||||
github.com/robfig/cron/v3 v3.0.1
|
github.com/robfig/cron/v3 v3.0.1
|
||||||
github.com/segmentio/encoding v0.1.14 // indirect
|
github.com/segmentio/encoding v0.1.14 // indirect
|
||||||
github.com/tribalwarshelp/golang-sdk v0.0.0-20200629130313-0880d8996ba6
|
github.com/tribalwarshelp/golang-sdk v0.0.0-20200709112050-ba3a7ba145b1
|
||||||
github.com/tribalwarshelp/shared v0.0.0-20200629123803-0cd6cb6f1e87
|
github.com/tribalwarshelp/shared v0.0.0-20200707075151-722e4a520a3c
|
||||||
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 // indirect
|
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1 // indirect
|
||||||
)
|
)
|
||||||
|
|
4
go.sum
4
go.sum
|
@ -107,6 +107,8 @@ github.com/tribalwarshelp/golang-sdk v0.0.0-20200625131004-06b44e214642 h1:PD5bO
|
||||||
github.com/tribalwarshelp/golang-sdk v0.0.0-20200625131004-06b44e214642/go.mod h1:dM2bGl7OxfsejbDu+TSFie8XS1XD1WBc1/dEqbIRLUk=
|
github.com/tribalwarshelp/golang-sdk v0.0.0-20200625131004-06b44e214642/go.mod h1:dM2bGl7OxfsejbDu+TSFie8XS1XD1WBc1/dEqbIRLUk=
|
||||||
github.com/tribalwarshelp/golang-sdk v0.0.0-20200629130313-0880d8996ba6 h1:+C127PqJZY5xS1gyWQAaSblxnktBxnFISzHsnEjPj0s=
|
github.com/tribalwarshelp/golang-sdk v0.0.0-20200629130313-0880d8996ba6 h1:+C127PqJZY5xS1gyWQAaSblxnktBxnFISzHsnEjPj0s=
|
||||||
github.com/tribalwarshelp/golang-sdk v0.0.0-20200629130313-0880d8996ba6/go.mod h1:J1nwE1gYoP8LJkb1sbL3OGqTp7u8RJZGpsKHYjS3+0Y=
|
github.com/tribalwarshelp/golang-sdk v0.0.0-20200629130313-0880d8996ba6/go.mod h1:J1nwE1gYoP8LJkb1sbL3OGqTp7u8RJZGpsKHYjS3+0Y=
|
||||||
|
github.com/tribalwarshelp/golang-sdk v0.0.0-20200709112050-ba3a7ba145b1 h1:p+/OHcQQYXCmxjG+YTkXfeL4Oxku7t6sW0KK2Ne85V4=
|
||||||
|
github.com/tribalwarshelp/golang-sdk v0.0.0-20200709112050-ba3a7ba145b1/go.mod h1:jQWbuz96EMQTuxhanSY1imtK4zEjPrB1cM5wCKkk7l4=
|
||||||
github.com/tribalwarshelp/shared v0.0.0-20200623144748-aa834a01dce6 h1:WZ1oxHysFtiPjHa2ADUqiGrzwcN3j0YpiVg/V2e/74o=
|
github.com/tribalwarshelp/shared v0.0.0-20200623144748-aa834a01dce6 h1:WZ1oxHysFtiPjHa2ADUqiGrzwcN3j0YpiVg/V2e/74o=
|
||||||
github.com/tribalwarshelp/shared v0.0.0-20200623144748-aa834a01dce6/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
|
github.com/tribalwarshelp/shared v0.0.0-20200623144748-aa834a01dce6/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
|
||||||
github.com/tribalwarshelp/shared v0.0.0-20200625120510-6d18ee334662/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
|
github.com/tribalwarshelp/shared v0.0.0-20200625120510-6d18ee334662/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
|
||||||
|
@ -114,6 +116,8 @@ github.com/tribalwarshelp/shared v0.0.0-20200625131045-74c5a9b3b4f0 h1:k1j0Nh2OI
|
||||||
github.com/tribalwarshelp/shared v0.0.0-20200625131045-74c5a9b3b4f0/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
|
github.com/tribalwarshelp/shared v0.0.0-20200625131045-74c5a9b3b4f0/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
|
||||||
github.com/tribalwarshelp/shared v0.0.0-20200629123803-0cd6cb6f1e87 h1:TMuZUk0wW+8dXSGVJVLRFFhLONKKYJRnLBFvbb9XTrE=
|
github.com/tribalwarshelp/shared v0.0.0-20200629123803-0cd6cb6f1e87 h1:TMuZUk0wW+8dXSGVJVLRFFhLONKKYJRnLBFvbb9XTrE=
|
||||||
github.com/tribalwarshelp/shared v0.0.0-20200629123803-0cd6cb6f1e87/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
|
github.com/tribalwarshelp/shared v0.0.0-20200629123803-0cd6cb6f1e87/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
|
||||||
|
github.com/tribalwarshelp/shared v0.0.0-20200707075151-722e4a520a3c h1:wenSReGHPux51q5s+9Ji0TOHCt8Zx6whxsjx8Iv7aZg=
|
||||||
|
github.com/tribalwarshelp/shared v0.0.0-20200707075151-722e4a520a3c/go.mod h1:tf+2yTHasV6jAF3V2deZ9slNoCyBzC0fMdTjI7clf6Y=
|
||||||
github.com/vmihailenco/bufpool v0.1.5/go.mod h1:fL9i/PRTuS7AELqAHwSU1Zf1c70xhkhGe/cD5ud9pJk=
|
github.com/vmihailenco/bufpool v0.1.5/go.mod h1:fL9i/PRTuS7AELqAHwSU1Zf1c70xhkhGe/cD5ud9pJk=
|
||||||
github.com/vmihailenco/bufpool v0.1.11 h1:gOq2WmBrq0i2yW5QJ16ykccQ4wH9UyEsgLm6czKAd94=
|
github.com/vmihailenco/bufpool v0.1.11 h1:gOq2WmBrq0i2yW5QJ16ykccQ4wH9UyEsgLm6czKAd94=
|
||||||
github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ=
|
github.com/vmihailenco/bufpool v0.1.11/go.mod h1:AFf/MOy3l2CFTKbxwt0mp2MwnqjNEs5H/UxrkA5jxTQ=
|
||||||
|
|
|
@ -1,16 +1,21 @@
|
||||||
package models
|
package models
|
||||||
|
|
||||||
import "time"
|
import (
|
||||||
|
"time"
|
||||||
|
|
||||||
|
shared_models "github.com/tribalwarshelp/shared/models"
|
||||||
|
)
|
||||||
|
|
||||||
type Observation struct {
|
type Observation struct {
|
||||||
tableName struct{} `pg:",alias:observation"`
|
tableName struct{} `pg:",alias:observation"`
|
||||||
|
|
||||||
ID int `json:"id" gqlgen:"id"`
|
ID int `json:"id" gqlgen:"id"`
|
||||||
Server string `pg:"unique:group_1,use_zero" json:"server" gqlgen:"server"`
|
Server string `pg:"unique:group_1,use_zero" json:"server" gqlgen:"server"`
|
||||||
TribeID int `pg:"unique:group_1,use_zero" json:"tribeID" gqlgen:"tribeID"`
|
TribeID int `pg:"unique:group_1,use_zero" json:"tribeID" gqlgen:"tribeID"`
|
||||||
GroupID int `pg:"on_delete:CASCADE,unique:group_1,use_zero" json:"groupID" gqlgen:"groupID"`
|
Tribe *shared_models.Tribe `pg:"-"`
|
||||||
Group *Group `json:"group,omitempty" gqlgen:"group"`
|
GroupID int `pg:"on_delete:CASCADE,unique:group_1,use_zero" json:"groupID" gqlgen:"groupID"`
|
||||||
CreatedAt time.Time `pg:"default:now()" json:"createdAt" gqlgen:"createdAt" xml:"createdAt"`
|
Group *Group `json:"group,omitempty" gqlgen:"group"`
|
||||||
|
CreatedAt time.Time `pg:"default:now()" json:"createdAt" gqlgen:"createdAt" xml:"createdAt"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type Observations []*Observation
|
type Observations []*Observation
|
||||||
|
|
|
@ -0,0 +1,14 @@
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import "github.com/tribalwarshelp/shared/models"
|
||||||
|
|
||||||
|
func FindLangVersionByTag(langVersions []*models.LangVersion, tag models.LanguageTag) *models.LangVersion {
|
||||||
|
lv := &models.LangVersion{}
|
||||||
|
for _, langVersion := range langVersions {
|
||||||
|
if langVersion.Tag == tag {
|
||||||
|
lv = langVersion
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return lv
|
||||||
|
}
|
Reference in New Issue