@ -10,9 +10,9 @@ import (
)
func ( d * DB ) CreateResource ( ctx context . Context , create * store . Resource ) ( * store . Resource , error ) {
fields := [ ] string { "` filename`", "`blob`" , "`external_link`" , "`type`" , "`size`" , "`creator_id`" , "`internal_path`" , "`memo_id`" }
placeholder := [ ] string { "?" , "?" , "?" , "?" , "?" , "?" , "?" , "?" }
args := [ ] any { create . Filename, create . Blob , create . ExternalLink , create . Type , create . Size , create . CreatorID , create . InternalPath , create . MemoID }
fields := [ ] string { "` resource_name`", "` filename`", "`blob`" , "`external_link`" , "`type`" , "`size`" , "`creator_id`" , "`internal_path`" , "`memo_id`" }
placeholder := [ ] string { "?" , "?" , "?" , "?" , "?" , "?" , "?" , "?" , "?" }
args := [ ] any { create . ResourceName, create . Filename, create . Blob , create . ExternalLink , create . Type , create . Size , create . CreatorID , create . InternalPath , create . MemoID }
stmt := "INSERT INTO `resource` (" + strings . Join ( fields , ", " ) + ") VALUES (" + strings . Join ( placeholder , ", " ) + ") RETURNING `id`, `created_ts`, `updated_ts`"
if err := d . db . QueryRowContext ( ctx , stmt , args ... ) . Scan ( & create . ID , & create . CreatedTs , & create . UpdatedTs ) ; err != nil {
@ -26,33 +26,30 @@ func (d *DB) ListResources(ctx context.Context, find *store.FindResource) ([]*st
where , args := [ ] string { "1 = 1" } , [ ] any { }
if v := find . ID ; v != nil {
where , args = append ( where , "id = ?" ) , append ( args , * v )
where , args = append ( where , "`id` = ?" ) , append ( args , * v )
}
if v := find . ResourceName ; v != nil {
where , args = append ( where , "`resource_name` = ?" ) , append ( args , * v )
}
if v := find . CreatorID ; v != nil {
where , args = append ( where , "creator_id = ?" ) , append ( args , * v )
where , args = append ( where , " ` creator_id` = ?") , append ( args , * v )
}
if v := find . Filename ; v != nil {
where , args = append ( where , " filename = ?") , append ( args , * v )
where , args = append ( where , " ` filename` = ?") , append ( args , * v )
}
if v := find . MemoID ; v != nil {
where , args = append ( where , " memo_id = ?") , append ( args , * v )
where , args = append ( where , " ` memo_id` = ?") , append ( args , * v )
}
if find . HasRelatedMemo {
where = append ( where , " memo_id IS NOT NULL")
where = append ( where , " ` memo_id` IS NOT NULL")
}
fields := [ ] string { " id", " filename", " external_link", " type", " size", " creator_id", " created_ts", " updated_ts", " internal_path", " memo_id"}
fields := [ ] string { " ` id` ", " `resource_name`", "` filename` ", " ` external_link` ", " ` type` ", " ` size` ", " ` creator_id` ", " ` created_ts` ", " ` updated_ts` ", " ` internal_path` ", " ` memo_id` "}
if find . GetBlob {
fields = append ( fields , " blob")
fields = append ( fields , " ` blob` ")
}
query := fmt . Sprintf ( `
SELECT
% s
FROM resource
WHERE % s
ORDER BY updated_ts DESC , created_ts DESC
` , strings . Join ( fields , ", " ) , strings . Join ( where , " AND " ) )
query := fmt . Sprintf ( "SELECT %s FROM `resource` WHERE %s ORDER BY `updated_ts` DESC, `created_ts` DESC" , strings . Join ( fields , ", " ) , strings . Join ( where , " AND " ) )
if find . Limit != nil {
query = fmt . Sprintf ( "%s LIMIT %d" , query , * find . Limit )
if find . Offset != nil {
@ -72,6 +69,7 @@ func (d *DB) ListResources(ctx context.Context, find *store.FindResource) ([]*st
var memoID sql . NullInt32
dests := [ ] any {
& resource . ID ,
& resource . ResourceName ,
& resource . Filename ,
& resource . ExternalLink ,
& resource . Type ,
@ -104,32 +102,32 @@ func (d *DB) ListResources(ctx context.Context, find *store.FindResource) ([]*st
func ( d * DB ) UpdateResource ( ctx context . Context , update * store . UpdateResource ) ( * store . Resource , error ) {
set , args := [ ] string { } , [ ] any { }
if v := update . ResourceName ; v != nil {
set , args = append ( set , "`resource_name` = ?" ) , append ( args , * v )
}
if v := update . UpdatedTs ; v != nil {
set , args = append ( set , "updated_ts = ?" ) , append ( args , * v )
set , args = append ( set , " ` updated_ts` = ?") , append ( args , * v )
}
if v := update . Filename ; v != nil {
set , args = append ( set , " filename = ?") , append ( args , * v )
set , args = append ( set , " ` filename` = ?") , append ( args , * v )
}
if v := update . InternalPath ; v != nil {
set , args = append ( set , " internal_path = ?") , append ( args , * v )
set , args = append ( set , " ` internal_path` = ?") , append ( args , * v )
}
if v := update . MemoID ; v != nil {
set , args = append ( set , " memo_id = ?") , append ( args , * v )
set , args = append ( set , " ` memo_id` = ?") , append ( args , * v )
}
if v := update . Blob ; v != nil {
set , args = append ( set , " blob = ?") , append ( args , v )
set , args = append ( set , " ` blob` = ?") , append ( args , v )
}
args = append ( args , update . ID )
fields := [ ] string { "id" , "filename" , "external_link" , "type" , "size" , "creator_id" , "created_ts" , "updated_ts" , "internal_path" }
stmt := `
UPDATE resource
SET ` + strings.Join(set, ", ") + `
WHERE id = ?
RETURNING ` + strings . Join ( fields , ", " )
fields := [ ] string { "`id`" , "`resource_name`" , "`filename`" , "`external_link`" , "`type`" , "`size`" , "`creator_id`" , "`created_ts`" , "`updated_ts`" , "`internal_path`" }
stmt := "UPDATE `resource` SET " + strings . Join ( set , ", " ) + " WHERE `id` = ? RETURNING " + strings . Join ( fields , ", " )
resource := store . Resource { }
dests := [ ] any {
& resource . ID ,
& resource . ResourceName ,
& resource . Filename ,
& resource . ExternalLink ,
& resource . Type ,
@ -147,10 +145,7 @@ func (d *DB) UpdateResource(ctx context.Context, update *store.UpdateResource) (
}
func ( d * DB ) DeleteResource ( ctx context . Context , delete * store . DeleteResource ) error {
stmt := `
DELETE FROM resource
WHERE id = ?
`
stmt := "DELETE FROM `resource` WHERE `id` = ?"
result , err := d . db . ExecContext ( ctx , stmt , delete . ID )
if err != nil {
return err
@ -168,16 +163,7 @@ func (d *DB) DeleteResource(ctx context.Context, delete *store.DeleteResource) e
}
func vacuumResource ( ctx context . Context , tx * sql . Tx ) error {
stmt := `
DELETE FROM
resource
WHERE
creator_id NOT IN (
SELECT
id
FROM
user
) `
stmt := "DELETE FROM `resource` WHERE `creator_id` NOT IN (SELECT `id` FROM `user`)"
_ , err := tx . ExecContext ( ctx , stmt )
if err != nil {
return err