Have got uploads working
This commit is contained in:
parent
97112d99dd
commit
6b697e008f
20 changed files with 751 additions and 7 deletions
|
|
@ -4,6 +4,17 @@
|
|||
|
||||
package sqlgen
|
||||
|
||||
type PendingUpload struct {
|
||||
ID interface{}
|
||||
SiteID int64
|
||||
Guid string
|
||||
UserID int64
|
||||
Filename string
|
||||
FileSize int64
|
||||
MimeType string
|
||||
UploadStartedAt int64
|
||||
}
|
||||
|
||||
type Post struct {
|
||||
ID int64
|
||||
SiteID int64
|
||||
|
|
@ -38,6 +49,16 @@ type Site struct {
|
|||
CreatedAt int64
|
||||
}
|
||||
|
||||
type Upload struct {
|
||||
ID interface{}
|
||||
SiteID int64
|
||||
Guid string
|
||||
MimeType string
|
||||
Filename string
|
||||
Alt string
|
||||
CreatedAt int64
|
||||
}
|
||||
|
||||
type User struct {
|
||||
ID int64
|
||||
Username string
|
||||
|
|
|
|||
68
providers/db/gen/sqlgen/pending_uploads.sql.go
Normal file
68
providers/db/gen/sqlgen/pending_uploads.sql.go
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.30.0
|
||||
// source: pending_uploads.sql
|
||||
|
||||
package sqlgen
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
const insertPendingUpload = `-- name: InsertPendingUpload :one
|
||||
INSERT INTO pending_uploads (
|
||||
site_id,
|
||||
guid,
|
||||
user_id,
|
||||
filename,
|
||||
file_size,
|
||||
mime_type,
|
||||
upload_started_at
|
||||
) VALUES (?, ?, ?, ?, ?, ?, ?)
|
||||
RETURNING id
|
||||
`
|
||||
|
||||
type InsertPendingUploadParams struct {
|
||||
SiteID int64
|
||||
Guid string
|
||||
UserID int64
|
||||
Filename string
|
||||
FileSize int64
|
||||
MimeType string
|
||||
UploadStartedAt int64
|
||||
}
|
||||
|
||||
func (q *Queries) InsertPendingUpload(ctx context.Context, arg InsertPendingUploadParams) (interface{}, error) {
|
||||
row := q.db.QueryRowContext(ctx, insertPendingUpload,
|
||||
arg.SiteID,
|
||||
arg.Guid,
|
||||
arg.UserID,
|
||||
arg.Filename,
|
||||
arg.FileSize,
|
||||
arg.MimeType,
|
||||
arg.UploadStartedAt,
|
||||
)
|
||||
var id interface{}
|
||||
err := row.Scan(&id)
|
||||
return id, err
|
||||
}
|
||||
|
||||
const selectPendingUploadByGUID = `-- name: SelectPendingUploadByGUID :one
|
||||
SELECT id, site_id, guid, user_id, filename, file_size, mime_type, upload_started_at FROM pending_uploads WHERE guid = ? LIMIT 1
|
||||
`
|
||||
|
||||
func (q *Queries) SelectPendingUploadByGUID(ctx context.Context, guid string) (PendingUpload, error) {
|
||||
row := q.db.QueryRowContext(ctx, selectPendingUploadByGUID, guid)
|
||||
var i PendingUpload
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.SiteID,
|
||||
&i.Guid,
|
||||
&i.UserID,
|
||||
&i.Filename,
|
||||
&i.FileSize,
|
||||
&i.MimeType,
|
||||
&i.UploadStartedAt,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
120
providers/db/gen/sqlgen/uploads.sql.go
Normal file
120
providers/db/gen/sqlgen/uploads.sql.go
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
// Code generated by sqlc. DO NOT EDIT.
|
||||
// versions:
|
||||
// sqlc v1.30.0
|
||||
// source: uploads.sql
|
||||
|
||||
package sqlgen
|
||||
|
||||
import (
|
||||
"context"
|
||||
)
|
||||
|
||||
const deleteUpload = `-- name: DeleteUpload :exec
|
||||
DELETE FROM uploads WHERE id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) DeleteUpload(ctx context.Context, id interface{}) error {
|
||||
_, err := q.db.ExecContext(ctx, deleteUpload, id)
|
||||
return err
|
||||
}
|
||||
|
||||
const insertUpload = `-- name: InsertUpload :exec
|
||||
INSERT INTO uploads (
|
||||
site_id,
|
||||
guid,
|
||||
mime_type,
|
||||
filename,
|
||||
created_at,
|
||||
alt
|
||||
) VALUES (?, ?, ?, ?, ?, ?)
|
||||
RETURNING id
|
||||
`
|
||||
|
||||
type InsertUploadParams struct {
|
||||
SiteID int64
|
||||
Guid string
|
||||
MimeType string
|
||||
Filename string
|
||||
CreatedAt int64
|
||||
Alt string
|
||||
}
|
||||
|
||||
func (q *Queries) InsertUpload(ctx context.Context, arg InsertUploadParams) error {
|
||||
_, err := q.db.ExecContext(ctx, insertUpload,
|
||||
arg.SiteID,
|
||||
arg.Guid,
|
||||
arg.MimeType,
|
||||
arg.Filename,
|
||||
arg.CreatedAt,
|
||||
arg.Alt,
|
||||
)
|
||||
return err
|
||||
}
|
||||
|
||||
const selectUploadByID = `-- name: SelectUploadByID :one
|
||||
SELECT id, site_id, guid, mime_type, filename, alt, created_at FROM uploads WHERE id = ?
|
||||
`
|
||||
|
||||
func (q *Queries) SelectUploadByID(ctx context.Context, id interface{}) (Upload, error) {
|
||||
row := q.db.QueryRowContext(ctx, selectUploadByID, id)
|
||||
var i Upload
|
||||
err := row.Scan(
|
||||
&i.ID,
|
||||
&i.SiteID,
|
||||
&i.Guid,
|
||||
&i.MimeType,
|
||||
&i.Filename,
|
||||
&i.Alt,
|
||||
&i.CreatedAt,
|
||||
)
|
||||
return i, err
|
||||
}
|
||||
|
||||
const selectUploadsOfSite = `-- name: SelectUploadsOfSite :many
|
||||
SELECT id, site_id, guid, mime_type, filename, alt, created_at FROM uploads WHERE site_id = ? ORDER BY created_at DESC
|
||||
`
|
||||
|
||||
func (q *Queries) SelectUploadsOfSite(ctx context.Context, siteID int64) ([]Upload, error) {
|
||||
rows, err := q.db.QueryContext(ctx, selectUploadsOfSite, siteID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
defer rows.Close()
|
||||
var items []Upload
|
||||
for rows.Next() {
|
||||
var i Upload
|
||||
if err := rows.Scan(
|
||||
&i.ID,
|
||||
&i.SiteID,
|
||||
&i.Guid,
|
||||
&i.MimeType,
|
||||
&i.Filename,
|
||||
&i.Alt,
|
||||
&i.CreatedAt,
|
||||
); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
items = append(items, i)
|
||||
}
|
||||
if err := rows.Close(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := rows.Err(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return items, nil
|
||||
}
|
||||
|
||||
const updateUpload = `-- name: UpdateUpload :exec
|
||||
UPDATE uploads SET alt = ? WHERE id = ?
|
||||
`
|
||||
|
||||
type UpdateUploadParams struct {
|
||||
Alt string
|
||||
ID interface{}
|
||||
}
|
||||
|
||||
func (q *Queries) UpdateUpload(ctx context.Context, arg UpdateUploadParams) error {
|
||||
_, err := q.db.ExecContext(ctx, updateUpload, arg.Alt, arg.ID)
|
||||
return err
|
||||
}
|
||||
107
providers/db/uploads.go
Normal file
107
providers/db/uploads.go
Normal file
|
|
@ -0,0 +1,107 @@
|
|||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"time"
|
||||
|
||||
"lmika.dev/lmika/weiro/models"
|
||||
"lmika.dev/lmika/weiro/providers/db/gen/sqlgen"
|
||||
)
|
||||
|
||||
func (db *Provider) SelectUploadByID(ctx context.Context, id int64) (models.Upload, error) {
|
||||
row, err := db.queries.SelectUploadByID(ctx, id)
|
||||
if err != nil {
|
||||
return models.Upload{}, err
|
||||
}
|
||||
|
||||
return dbUploadToUpload(row), nil
|
||||
}
|
||||
|
||||
func (db *Provider) SelectUploadsOfSite(ctx context.Context, siteID int64) ([]models.Upload, error) {
|
||||
rows, err := db.queries.SelectUploadsOfSite(ctx, siteID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
uploads := make([]models.Upload, len(rows))
|
||||
for i, row := range rows {
|
||||
uploads[i] = dbUploadToUpload(row)
|
||||
}
|
||||
return uploads, nil
|
||||
}
|
||||
|
||||
func (db *Provider) SaveUpload(ctx context.Context, upload *models.Upload) error {
|
||||
if upload.ID == 0 {
|
||||
if err := db.queries.InsertUpload(ctx, sqlgen.InsertUploadParams{
|
||||
SiteID: upload.SiteID,
|
||||
Guid: upload.GUID,
|
||||
MimeType: upload.MIMEType,
|
||||
Filename: upload.Filename,
|
||||
CreatedAt: upload.CreatedAt,
|
||||
Alt: upload.Alt,
|
||||
}); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
return db.queries.UpdateUpload(ctx, sqlgen.UpdateUploadParams{
|
||||
Alt: upload.Alt,
|
||||
ID: upload.ID,
|
||||
})
|
||||
}
|
||||
|
||||
func (db *Provider) DeleteUpload(ctx context.Context, id int64) error {
|
||||
return db.queries.DeleteUpload(ctx, id)
|
||||
}
|
||||
|
||||
func (db *Provider) SelectPendingUploadByGUID(ctx context.Context, guid string) (models.PendingUpload, error) {
|
||||
row, err := db.queries.SelectPendingUploadByGUID(ctx, guid)
|
||||
if err != nil {
|
||||
return models.PendingUpload{}, err
|
||||
}
|
||||
|
||||
return dbPendingUploadToPendingUpload(row), nil
|
||||
}
|
||||
|
||||
func (db *Provider) SavePendingUpload(ctx context.Context, pending *models.PendingUpload) error {
|
||||
_, err := db.queries.InsertPendingUpload(ctx, sqlgen.InsertPendingUploadParams{
|
||||
SiteID: pending.SiteID,
|
||||
Guid: pending.GUID,
|
||||
UserID: pending.UserID,
|
||||
Filename: pending.Filename,
|
||||
FileSize: pending.FileSize,
|
||||
MimeType: pending.MIMEType,
|
||||
UploadStartedAt: pending.UploadStarted.Unix(),
|
||||
})
|
||||
return err
|
||||
}
|
||||
|
||||
func dbUploadToUpload(row sqlgen.Upload) models.Upload {
|
||||
var id int64
|
||||
if idVal, ok := row.ID.(int64); ok {
|
||||
id = idVal
|
||||
}
|
||||
|
||||
return models.Upload{
|
||||
ID: id,
|
||||
SiteID: row.SiteID,
|
||||
GUID: row.Guid,
|
||||
MIMEType: row.MimeType,
|
||||
Filename: row.Filename,
|
||||
Alt: row.Alt,
|
||||
CreatedAt: row.CreatedAt,
|
||||
}
|
||||
}
|
||||
|
||||
func dbPendingUploadToPendingUpload(row sqlgen.PendingUpload) models.PendingUpload {
|
||||
return models.PendingUpload{
|
||||
GUID: row.Guid,
|
||||
SiteID: row.SiteID,
|
||||
UserID: row.UserID,
|
||||
FileSize: row.FileSize,
|
||||
Filename: row.Filename,
|
||||
MIMEType: row.MimeType,
|
||||
UploadStarted: time.Unix(row.UploadStartedAt, 0),
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue