Gisle Aune
1 year ago
13 changed files with 413 additions and 3 deletions
-
32entities/item.go
-
17internal/genutils/retain.go
-
7internal/validate/tag.go
-
1models/errors.go
-
3models/item.go
-
8ports/mysql/db.go
-
113ports/mysql/items.go
-
40ports/mysql/mysqlcore/db.go
-
6ports/mysql/mysqlcore/models.go
-
97ports/mysql/mysqlcore/tag.sql.go
-
22ports/mysql/queries/tag.sql
-
16scripts/goose-mysql/20221119134102_create_table_tag.sql
-
54usecases/items/service.go
@ -0,0 +1,17 @@ |
|||
package genutils |
|||
|
|||
func Retain[T any](arr []T, cb func(T) bool) []T { |
|||
return RetainInPlace(append(arr[:0:0], arr...), cb) |
|||
} |
|||
|
|||
func RetainInPlace[T any](arr []T, cb func(T) bool) []T { |
|||
count := 0 |
|||
for _, v := range arr { |
|||
if cb(v) { |
|||
arr[count] = v |
|||
count += 1 |
|||
} |
|||
} |
|||
|
|||
return arr[:count] |
|||
} |
@ -0,0 +1,7 @@ |
|||
package validate |
|||
|
|||
import "strings" |
|||
|
|||
func Tag(s string) bool { |
|||
return !strings.ContainsAny(s, ",;\t\r\n <>") |
|||
} |
@ -0,0 +1,97 @@ |
|||
// Code generated by sqlc. DO NOT EDIT.
|
|||
// versions:
|
|||
// sqlc v1.13.0
|
|||
// source: tag.sql
|
|||
|
|||
package mysqlcore |
|||
|
|||
import ( |
|||
"context" |
|||
) |
|||
|
|||
const deleteTag = `-- name: DeleteTag :exec |
|||
DELETE |
|||
FROM tag |
|||
WHERE object_kind = ? |
|||
AND object_id = ? |
|||
AND tag_name = ? |
|||
` |
|||
|
|||
type DeleteTagParams struct { |
|||
ObjectKind int32 |
|||
ObjectID int |
|||
TagName string |
|||
} |
|||
|
|||
func (q *Queries) DeleteTag(ctx context.Context, arg DeleteTagParams) error { |
|||
_, err := q.exec(ctx, q.deleteTagStmt, deleteTag, arg.ObjectKind, arg.ObjectID, arg.TagName) |
|||
return err |
|||
} |
|||
|
|||
const deleteTagByObject = `-- name: DeleteTagByObject :exec |
|||
DELETE |
|||
FROM tag |
|||
WHERE object_kind = ? |
|||
AND object_id = ? |
|||
` |
|||
|
|||
type DeleteTagByObjectParams struct { |
|||
ObjectKind int32 |
|||
ObjectID int |
|||
} |
|||
|
|||
func (q *Queries) DeleteTagByObject(ctx context.Context, arg DeleteTagByObjectParams) error { |
|||
_, err := q.exec(ctx, q.deleteTagByObjectStmt, deleteTagByObject, arg.ObjectKind, arg.ObjectID) |
|||
return err |
|||
} |
|||
|
|||
const insertTag = `-- name: InsertTag :exec |
|||
INSERT INTO tag (object_kind, object_id, tag_name) |
|||
VALUES (?, ?, ?) |
|||
` |
|||
|
|||
type InsertTagParams struct { |
|||
ObjectKind int32 |
|||
ObjectID int |
|||
TagName string |
|||
} |
|||
|
|||
func (q *Queries) InsertTag(ctx context.Context, arg InsertTagParams) error { |
|||
_, err := q.exec(ctx, q.insertTagStmt, insertTag, arg.ObjectKind, arg.ObjectID, arg.TagName) |
|||
return err |
|||
} |
|||
|
|||
const listTagsByObject = `-- name: ListTagsByObject :many |
|||
SELECT tag_name |
|||
FROM tag |
|||
WHERE object_kind = ? |
|||
AND object_id = ? |
|||
` |
|||
|
|||
type ListTagsByObjectParams struct { |
|||
ObjectKind int32 |
|||
ObjectID int |
|||
} |
|||
|
|||
func (q *Queries) ListTagsByObject(ctx context.Context, arg ListTagsByObjectParams) ([]string, error) { |
|||
rows, err := q.query(ctx, q.listTagsByObjectStmt, listTagsByObject, arg.ObjectKind, arg.ObjectID) |
|||
if err != nil { |
|||
return nil, err |
|||
} |
|||
defer rows.Close() |
|||
items := []string{} |
|||
for rows.Next() { |
|||
var tag_name string |
|||
if err := rows.Scan(&tag_name); err != nil { |
|||
return nil, err |
|||
} |
|||
items = append(items, tag_name) |
|||
} |
|||
if err := rows.Close(); err != nil { |
|||
return nil, err |
|||
} |
|||
if err := rows.Err(); err != nil { |
|||
return nil, err |
|||
} |
|||
return items, nil |
|||
} |
@ -0,0 +1,22 @@ |
|||
-- name: InsertTag :exec |
|||
INSERT INTO tag (object_kind, object_id, tag_name) |
|||
VALUES (?, ?, ?); |
|||
|
|||
-- name: DeleteTag :exec |
|||
DELETE |
|||
FROM tag |
|||
WHERE object_kind = ? |
|||
AND object_id = ? |
|||
AND tag_name = ?; |
|||
|
|||
-- name: DeleteTagByObject :exec |
|||
DELETE |
|||
FROM tag |
|||
WHERE object_kind = ? |
|||
AND object_id = ?; |
|||
|
|||
-- name: ListTagsByObject :many |
|||
SELECT tag_name |
|||
FROM tag |
|||
WHERE object_kind = ? |
|||
AND object_id = ?; |
@ -0,0 +1,16 @@ |
|||
-- +goose Up |
|||
-- +goose StatementBegin |
|||
CREATE TABLE tag ( |
|||
object_kind TINYINT NOT NULL, |
|||
object_id INT NOT NULL, |
|||
tag_name VARCHAR(255) NOT NULL, |
|||
|
|||
PRIMARY KEY (object_kind, object_id, tag_name), |
|||
UNIQUE (object_kind, tag_name, object_id) |
|||
); |
|||
-- +goose StatementEnd |
|||
|
|||
-- +goose Down |
|||
-- +goose StatementBegin |
|||
DROP TABLE IF EXISTS tag; |
|||
-- +goose StatementEnd |
Write
Preview
Loading…
Cancel
Save
Reference in new issue