weiro/providers/db/sites.go

107 lines
2.3 KiB
Go
Raw Permalink Normal View History

2026-02-19 11:29:44 +00:00
package db
import (
"context"
"time"
2026-02-19 11:29:44 +00:00
"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
}
2026-02-27 22:49:43 +00:00
return dbSiteToSite(row), nil
2026-02-19 11:29:44 +00:00
}
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
}
2026-02-19 11:29:44 +00:00
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 {
2026-02-27 22:49:43 +00:00
sites[i] = dbSiteToSite(row)
2026-02-19 11:29:44 +00:00
}
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,
2026-02-27 22:49:43 +00:00
Guid: site.GUID,
Title: site.Title,
Tagline: site.Tagline,
CreatedAt: timeToInt(site.Created),
2026-02-19 11:29:44 +00:00
})
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
}
2026-02-27 22:49:43 +00:00
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
}
2026-02-27 22:49:43 +00:00
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(),
}
}