This commit is contained in:
parent
500bf48295
commit
f3a139b809
6 changed files with 103 additions and 34 deletions
|
@ -18,14 +18,6 @@ import (
|
||||||
"git.mstar.dev/mstar/linstrom/storage-new/models"
|
"git.mstar.dev/mstar/linstrom/storage-new/models"
|
||||||
)
|
)
|
||||||
|
|
||||||
// "git.mstar.dev/mstar/linstrom/config"
|
|
||||||
|
|
||||||
// "context"
|
|
||||||
// "time"
|
|
||||||
// postgresContainer "github.com/testcontainers/testcontainers-go/modules/postgres"
|
|
||||||
// "github.com/testcontainers/testcontainers-go"
|
|
||||||
// "github.com/testcontainers/testcontainers-go/wait"
|
|
||||||
|
|
||||||
const (
|
const (
|
||||||
dbName = "linstrom"
|
dbName = "linstrom"
|
||||||
dbUser = "linstrom"
|
dbUser = "linstrom"
|
||||||
|
@ -38,31 +30,6 @@ func main() {
|
||||||
other.ConfigureLogging(nil)
|
other.ConfigureLogging(nil)
|
||||||
config.ReadAndWriteToGlobal(*shared.FlagConfigFile)
|
config.ReadAndWriteToGlobal(*shared.FlagConfigFile)
|
||||||
|
|
||||||
// Set up a temporary postgres container for gorm-gen to do its thing
|
|
||||||
// log.Info().Msg("Starting temporary postgres container")
|
|
||||||
// pgContainer, err := postgresContainer.Run(
|
|
||||||
// context.Background(),
|
|
||||||
// "postgres:16.4-alpine",
|
|
||||||
// postgresContainer.WithDatabase(dbName),
|
|
||||||
// postgresContainer.WithUsername(dbUser),
|
|
||||||
// postgresContainer.WithPassword(dbPass),
|
|
||||||
// testcontainers.WithWaitStrategyAndDeadline(
|
|
||||||
// time.Minute,
|
|
||||||
// wait.ForLog("database system is ready to accept connections").
|
|
||||||
// WithOccurrence(2).
|
|
||||||
// WithStartupTimeout(time.Second*5),
|
|
||||||
// ),
|
|
||||||
// )
|
|
||||||
// if err != nil {
|
|
||||||
// log.Fatal().Err(err).Msg("Failed to setup temporary postgres container")
|
|
||||||
// }
|
|
||||||
// log.Info().Msg("Temporary postgres container started")
|
|
||||||
// defer func() {
|
|
||||||
// if err := testcontainers.TerminateContainer(pgContainer); err != nil {
|
|
||||||
// log.Fatal().Err(err).Msg("Failed to terminate temporary postgres container")
|
|
||||||
// }
|
|
||||||
// log.Info().Msg("Temporary postgres container stopped")
|
|
||||||
// }()
|
|
||||||
db, err := gorm.Open(
|
db, err := gorm.Open(
|
||||||
postgres.Open(config.GlobalConfig.Storage.BuildPostgresDSN()),
|
postgres.Open(config.GlobalConfig.Storage.BuildPostgresDSN()),
|
||||||
// postgres.Open(pgContainer.MustConnectionString(context.Background())),
|
// postgres.Open(pgContainer.MustConnectionString(context.Background())),
|
||||||
|
@ -84,7 +51,10 @@ func main() {
|
||||||
log.Info().Msg("Applying basic operations on all datatypes")
|
log.Info().Msg("Applying basic operations on all datatypes")
|
||||||
g.ApplyBasic(models.AllTypes...)
|
g.ApplyBasic(models.AllTypes...)
|
||||||
|
|
||||||
log.Info().Msg("Starting generation")
|
log.Info().Msg("Basic operations applied, applying extra features")
|
||||||
|
g.ApplyInterface(func(models.INotification) {}, models.Notification{})
|
||||||
|
|
||||||
|
log.Info().Msg("Extra features applied, starting generation")
|
||||||
g.Execute()
|
g.Execute()
|
||||||
log.Info().Msg("Code generation complete")
|
log.Info().Msg("Code generation complete")
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,10 +7,12 @@ var AllTypes = []any{
|
||||||
&MediaMetadata{},
|
&MediaMetadata{},
|
||||||
&Note{},
|
&Note{},
|
||||||
&NoteToAttachment{},
|
&NoteToAttachment{},
|
||||||
|
&NoteToBoost{},
|
||||||
&NoteToEmote{},
|
&NoteToEmote{},
|
||||||
&NoteToFeed{},
|
&NoteToFeed{},
|
||||||
&NoteToPing{},
|
&NoteToPing{},
|
||||||
&NoteTag{},
|
&NoteTag{},
|
||||||
|
&Notification{},
|
||||||
&Reaction{},
|
&Reaction{},
|
||||||
&RemoteServer{},
|
&RemoteServer{},
|
||||||
&Role{},
|
&Role{},
|
||||||
|
|
13
storage-new/models/NoteToBoost.go
Normal file
13
storage-new/models/NoteToBoost.go
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
package models
|
||||||
|
|
||||||
|
import "time"
|
||||||
|
|
||||||
|
// Describes a user boosting one note
|
||||||
|
type NoteToBoost struct {
|
||||||
|
ID uint `gorm:"primarykey"`
|
||||||
|
CreatedAt time.Time
|
||||||
|
User User
|
||||||
|
UserId string
|
||||||
|
Note Note
|
||||||
|
NoteId string
|
||||||
|
}
|
41
storage-new/models/Notification.go
Normal file
41
storage-new/models/Notification.go
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
package models
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
|
||||||
|
"gorm.io/gen"
|
||||||
|
"gorm.io/gorm"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Notifications inform users of inbound events
|
||||||
|
// happening to their content
|
||||||
|
type Notification struct {
|
||||||
|
gorm.Model
|
||||||
|
ForUser User // The user the notification is for
|
||||||
|
ForUserId string
|
||||||
|
SourceNote *Note // The note where the notification originates from
|
||||||
|
SourceNoteId sql.NullString
|
||||||
|
SourceUser *User // The user causing the notification
|
||||||
|
SourceUserId sql.NullString
|
||||||
|
Cause NotificationCauseType // What the cause of the notification is
|
||||||
|
ViewedState NotificationViewedState // What the last known state of the notification is
|
||||||
|
}
|
||||||
|
|
||||||
|
type INotification interface {
|
||||||
|
// Update a given set of notifications to a given viewed state
|
||||||
|
//
|
||||||
|
// UPDATE @@table SET viewed_state = @state WHERE id IN @id
|
||||||
|
SetState(state NotificationViewedState, ids ...uint) error
|
||||||
|
|
||||||
|
// Get the lastest count amount of notifications with a given offset for a user
|
||||||
|
//
|
||||||
|
// SELECT * FROM @@table WHERE for_user_id = @id
|
||||||
|
// ORDER BY id DESC
|
||||||
|
// {{if count > 0 }}
|
||||||
|
// LIMIT @count
|
||||||
|
// {{else}}
|
||||||
|
// LIMIT 20
|
||||||
|
// {{end}}
|
||||||
|
// OFFSET @offset
|
||||||
|
GetLatestWithOffset(userId string, count uint, offset uint) ([]gen.T, error)
|
||||||
|
}
|
22
storage-new/models/NotificationType.go
Normal file
22
storage-new/models/NotificationType.go
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
package models
|
||||||
|
|
||||||
|
import "database/sql/driver"
|
||||||
|
|
||||||
|
// What a notification is caused by
|
||||||
|
type NotificationCauseType uint8
|
||||||
|
|
||||||
|
const (
|
||||||
|
NotificationTypeReply NotificationCauseType = iota // A new reply
|
||||||
|
NotificationTypeReaction // A new reaction
|
||||||
|
NotificationTypeBoost // A note got boosted
|
||||||
|
NotificationTypeFollowRequest // Someone requested to follow
|
||||||
|
)
|
||||||
|
|
||||||
|
func (r *NotificationCauseType) Value() (driver.Value, error) {
|
||||||
|
return r, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ct *NotificationCauseType) Scan(value any) error {
|
||||||
|
*ct = NotificationCauseType(value.(uint8))
|
||||||
|
return nil
|
||||||
|
}
|
21
storage-new/models/NotificationViewedStateType.go
Normal file
21
storage-new/models/NotificationViewedStateType.go
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
package models
|
||||||
|
|
||||||
|
import "database/sql/driver"
|
||||||
|
|
||||||
|
type NotificationViewedState uint8
|
||||||
|
|
||||||
|
const (
|
||||||
|
NotViewed NotificationViewedState = iota
|
||||||
|
Viewed
|
||||||
|
Accepted
|
||||||
|
Denied
|
||||||
|
)
|
||||||
|
|
||||||
|
func (r *NotificationViewedState) Value() (driver.Value, error) {
|
||||||
|
return r, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ct *NotificationViewedState) Scan(value any) error {
|
||||||
|
*ct = NotificationViewedState(value.(uint8))
|
||||||
|
return nil
|
||||||
|
}
|
Loading…
Reference in a new issue