107 lines
2.3 KiB
Go
107 lines
2.3 KiB
Go
package db
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"lmika.dev/lmika/weiro/models"
|
|
"lmika.dev/lmika/weiro/providers/db/gen/sqlgen"
|
|
)
|
|
|
|
func (db *Provider) SelectSiteByID(ctx context.Context, id int64) (models.Site, error) {
|
|
row, err := db.queries.SelectSiteByID(ctx, id)
|
|
if err != nil {
|
|
return models.Site{}, err
|
|
}
|
|
|
|
return dbSiteToSite(row), nil
|
|
}
|
|
|
|
func (db *Provider) SelectSiteByGUID(ctx context.Context, guid string) (models.Site, error) {
|
|
row, err := db.queries.SelectSiteByGUID(ctx, guid)
|
|
if err != nil {
|
|
return models.Site{}, err
|
|
}
|
|
|
|
return dbSiteToSite(row), nil
|
|
}
|
|
|
|
func (db *Provider) SelectSitesOwnedByUser(ctx context.Context, ownerID int64) ([]models.Site, error) {
|
|
rows, err := db.queries.SelectSitesOwnedByUser(ctx, ownerID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sites := make([]models.Site, len(rows))
|
|
for i, row := range rows {
|
|
sites[i] = dbSiteToSite(row)
|
|
}
|
|
return sites, nil
|
|
}
|
|
|
|
func (db *Provider) SaveSite(ctx context.Context, site *models.Site) error {
|
|
if site.ID == 0 {
|
|
newID, err := db.queries.InsertSite(ctx, sqlgen.InsertSiteParams{
|
|
OwnerID: site.OwnerID,
|
|
Guid: site.GUID,
|
|
Title: site.Title,
|
|
Tagline: site.Tagline,
|
|
CreatedAt: timeToInt(site.Created),
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
site.ID = newID
|
|
return nil
|
|
}
|
|
|
|
// No update query defined in sqlgen yet
|
|
return nil
|
|
}
|
|
|
|
func (db *Provider) HasUsersAndSites(ctx context.Context) (bool, error) {
|
|
nullBool, err := db.queries.HasUsersAndSites(ctx)
|
|
if err != nil {
|
|
return false, err
|
|
}
|
|
return nullBool.Valid && nullBool.Bool, nil
|
|
}
|
|
|
|
type SiteWithOwner struct {
|
|
ID int64
|
|
GUID string
|
|
Title string
|
|
OwnerID int64
|
|
Username string
|
|
}
|
|
|
|
func (db *Provider) SelectAllSitesWithOwners(ctx context.Context) ([]SiteWithOwner, error) {
|
|
rows, err := db.queries.SelectAllSitesWithOwners(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
sites := make([]SiteWithOwner, len(rows))
|
|
for i, row := range rows {
|
|
sites[i] = SiteWithOwner{
|
|
ID: row.ID,
|
|
GUID: row.Guid,
|
|
Title: row.Title,
|
|
OwnerID: row.OwnerID,
|
|
Username: row.Username,
|
|
}
|
|
}
|
|
return sites, nil
|
|
}
|
|
|
|
func dbSiteToSite(row sqlgen.Site) models.Site {
|
|
return models.Site{
|
|
ID: row.ID,
|
|
OwnerID: row.OwnerID,
|
|
GUID: row.Guid,
|
|
Title: row.Title,
|
|
Tagline: row.Tagline,
|
|
Created: time.Unix(row.CreatedAt, 0).UTC(),
|
|
}
|
|
}
|