From 31e3778061a20e0787c076d9353e82b2e223841e Mon Sep 17 00:00:00 2001 From: Kyren223 Date: Sun, 27 Oct 2024 17:04:08 +0200 Subject: feat: add setup for SQL --- go.mod | 2 +- go.sum | 10 ++-- internal/client/client.go | 4 +- internal/data/chat.go | 55 ------------------ internal/data/db.go | 31 ++++++++++ internal/data/frequencies.sql.go | 63 ++++++++++++++++++++ internal/data/messages.sql.go | 114 +++++++++++++++++++++++++++++++++++++ internal/data/models.go | 41 +++++++++++++ internal/data/networks.sql.go | 74 ++++++++++++++++++++++++ internal/data/users.sql.go | 84 +++++++++++++++++++++++++++ migrations/20241026174345_init.sql | 45 +++++++++++++++ query/frequencies.sql | 12 ++++ query/messages.sql | 19 +++++++ query/networks.sql | 15 +++++ query/users.sql | 23 ++++++++ sqlc.yml | 17 ++++++ 16 files changed, 545 insertions(+), 64 deletions(-) delete mode 100644 internal/data/chat.go create mode 100644 internal/data/db.go create mode 100644 internal/data/frequencies.sql.go create mode 100644 internal/data/messages.sql.go create mode 100644 internal/data/models.go create mode 100644 internal/data/networks.sql.go create mode 100644 internal/data/users.sql.go create mode 100644 migrations/20241026174345_init.sql create mode 100644 query/frequencies.sql create mode 100644 query/messages.sql create mode 100644 query/networks.sql create mode 100644 query/users.sql create mode 100644 sqlc.yml diff --git a/go.mod b/go.mod index d4e63e5..769d8d2 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,6 @@ require ( ) require ( - github.com/ProtonMail/gopenpgp/v3 v3.0.0-beta.2-proton // indirect github.com/atotto/clipboard v0.1.4 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/charmbracelet/x/ansi v0.2.3 // indirect @@ -24,6 +23,7 @@ require ( github.com/muesli/cancelreader v0.2.2 // indirect github.com/muesli/termenv v0.15.2 // indirect github.com/rivo/uniseg v0.4.7 // indirect + github.com/stretchr/testify v1.7.0 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect golang.org/x/sync v0.8.0 // indirect golang.org/x/sys v0.24.0 // indirect diff --git a/go.sum b/go.sum index 51f9466..c8c3dd2 100644 --- a/go.sum +++ b/go.sum @@ -1,7 +1,5 @@ github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= -github.com/ProtonMail/gopenpgp/v3 v3.0.0-beta.2-proton h1:XFu8VgaGnb5MGOnwUr/l25HGLwfI/XFz12yTb3qhUYQ= -github.com/ProtonMail/gopenpgp/v3 v3.0.0-beta.2-proton/go.mod h1:TBpqWZ9IzA7g3TEzNA9Fwv/nA/eYpjcvYQBq+FX+tE4= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= @@ -39,9 +37,9 @@ github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZN github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= @@ -52,8 +50,8 @@ golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/client/client.go b/internal/client/client.go index 4d75205..598772b 100644 --- a/internal/client/client.go +++ b/internal/client/client.go @@ -135,12 +135,12 @@ func (m model) Update(msg tea.Msg) (tea.Model, tea.Cmd) { switch msg := msg.(type) { case *packet.Messages: slices.SortFunc(msg.Messages, func(a, b data.Message) int { - return a.CmpTimestamp(b) + if a.ID - b.ID < 0 { return -1 } else { return 1 } }) m.messages = []string{} for _, message := range msg.Messages { - m.messages = append(m.messages, message.Contents) + m.messages = append(m.messages, message.Content) } m.viewport.SetContent(strings.Join(m.messages, "\n")) diff --git a/internal/data/chat.go b/internal/data/chat.go deleted file mode 100644 index ae5dc67..0000000 --- a/internal/data/chat.go +++ /dev/null @@ -1,55 +0,0 @@ -package data - -import ( - "github.com/kyren223/eko/pkg/snowflake" - "github.com/kyren223/eko/pkg/utils" -) - -// Represents an Eko Network, equivalent to a "discord server". -type Network struct { - id snowflake.ID - name string - frequencies []snowflake.ID -} - -// Represents an Eko Frequency, equivalent to a "discord channel" within a "discord server". -type Frequency struct { - id snowflake.ID - name string -} - -// Represents an Eko Signal, equivalent to a "discord message" between only 2 people. -type Signal struct { - userId1 snowflake.ID - userId2 snowflake.ID -} - -// Represents a message -type Message struct { - Id snowflake.ID - SenderId snowflake.ID - FrequencyId snowflake.ID - NetworkId snowflake.ID - Contents string -} - -func (a Message) CmpTimestamp(b Message) int { - cmpTime := a.Id.Time() - b.Id.Time() - if cmpTime != 0 { - return int(utils.Clamp(cmpTime, -1, 1)) - } - cmpStep := a.Id.Step() - b.Id.Step() - if cmpStep != 0 { - return int(utils.Clamp(cmpStep, -1, 1)) - } - cmpNode := a.Id.Node() - b.Id.Node() - if cmpNode != 0 { - return int(utils.Clamp(cmpNode, -1, 1)) - } - return 0 -} - -// Represents an Eko User -type User struct { - id snowflake.ID -} diff --git a/internal/data/db.go b/internal/data/db.go new file mode 100644 index 0000000..02c70ab --- /dev/null +++ b/internal/data/db.go @@ -0,0 +1,31 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 + +package data + +import ( + "context" + "database/sql" +) + +type DBTX interface { + ExecContext(context.Context, string, ...interface{}) (sql.Result, error) + PrepareContext(context.Context, string) (*sql.Stmt, error) + QueryContext(context.Context, string, ...interface{}) (*sql.Rows, error) + QueryRowContext(context.Context, string, ...interface{}) *sql.Row +} + +func New(db DBTX) *Queries { + return &Queries{db: db} +} + +type Queries struct { + db DBTX +} + +func (q *Queries) WithTx(tx *sql.Tx) *Queries { + return &Queries{ + db: tx, + } +} diff --git a/internal/data/frequencies.sql.go b/internal/data/frequencies.sql.go new file mode 100644 index 0000000..dacbf94 --- /dev/null +++ b/internal/data/frequencies.sql.go @@ -0,0 +1,63 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: frequencies.sql + +package data + +import ( + "context" + + "github.com/kyren223/eko/pkg/snowflake" +) + +const createFrequency = `-- name: CreateFrequency :one +INSERT INTO frequencies ( + id, network_id, name +) VALUES ( + ?, ?, ? +) +RETURNING id, network_id, name +` + +type CreateFrequencyParams struct { + ID snowflake.ID + NetworkID snowflake.ID + Name string +} + +func (q *Queries) CreateFrequency(ctx context.Context, arg CreateFrequencyParams) (Frequency, error) { + row := q.db.QueryRowContext(ctx, createFrequency, arg.ID, arg.NetworkID, arg.Name) + var i Frequency + err := row.Scan(&i.ID, &i.NetworkID, &i.Name) + return i, err +} + +const getNetworkFrequencies = `-- name: GetNetworkFrequencies :many +SELECT id, network_id, name FROM frequencies +WHERE network_id = ? +ORDER BY id +` + +func (q *Queries) GetNetworkFrequencies(ctx context.Context, networkID snowflake.ID) ([]Frequency, error) { + rows, err := q.db.QueryContext(ctx, getNetworkFrequencies, networkID) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Frequency + for rows.Next() { + var i Frequency + if err := rows.Scan(&i.ID, &i.NetworkID, &i.Name); 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 +} diff --git a/internal/data/messages.sql.go b/internal/data/messages.sql.go new file mode 100644 index 0000000..38d2b24 --- /dev/null +++ b/internal/data/messages.sql.go @@ -0,0 +1,114 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: messages.sql + +package data + +import ( + "context" + + "github.com/kyren223/eko/pkg/snowflake" +) + +const createDirectMessage = `-- name: CreateDirectMessage :one +INSERT INTO messages ( + id, content, sender_id, receiver_id +) VALUES ( + ?, ?, ?, ? +) +RETURNING id, sender_id, content, frequency_id, receiver_id +` + +type CreateDirectMessageParams struct { + ID snowflake.ID + Content string + SenderID snowflake.ID + ReceiverID snowflake.ID +} + +func (q *Queries) CreateDirectMessage(ctx context.Context, arg CreateDirectMessageParams) (Message, error) { + row := q.db.QueryRowContext(ctx, createDirectMessage, + arg.ID, + arg.Content, + arg.SenderID, + arg.ReceiverID, + ) + var i Message + err := row.Scan( + &i.ID, + &i.SenderID, + &i.Content, + &i.FrequencyID, + &i.ReceiverID, + ) + return i, err +} + +const createMessage = `-- name: CreateMessage :one +INSERT INTO messages ( + id, content, sender_id, frequency_id +) VALUES ( + ?, ?, ?, ? +) +RETURNING id, sender_id, content, frequency_id, receiver_id +` + +type CreateMessageParams struct { + ID snowflake.ID + Content string + SenderID snowflake.ID + FrequencyID snowflake.ID +} + +func (q *Queries) CreateMessage(ctx context.Context, arg CreateMessageParams) (Message, error) { + row := q.db.QueryRowContext(ctx, createMessage, + arg.ID, + arg.Content, + arg.SenderID, + arg.FrequencyID, + ) + var i Message + err := row.Scan( + &i.ID, + &i.SenderID, + &i.Content, + &i.FrequencyID, + &i.ReceiverID, + ) + return i, err +} + +const listMessages = `-- name: ListMessages :many +SELECT id, sender_id, content, frequency_id, receiver_id FROM messages +ORDER BY id +` + +func (q *Queries) ListMessages(ctx context.Context) ([]Message, error) { + rows, err := q.db.QueryContext(ctx, listMessages) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Message + for rows.Next() { + var i Message + if err := rows.Scan( + &i.ID, + &i.SenderID, + &i.Content, + &i.FrequencyID, + &i.ReceiverID, + ); 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 +} diff --git a/internal/data/models.go b/internal/data/models.go new file mode 100644 index 0000000..e7921e2 --- /dev/null +++ b/internal/data/models.go @@ -0,0 +1,41 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 + +package data + +import ( + "crypto/ed25519" + "github.com/kyren223/eko/pkg/snowflake" +) + +type Frequency struct { + ID snowflake.ID + NetworkID snowflake.ID + Name string +} + +type Message struct { + ID snowflake.ID + SenderID snowflake.ID + Content string + FrequencyID snowflake.ID + ReceiverID snowflake.ID +} + +type Network struct { + ID snowflake.ID + Name string + OwnerID snowflake.ID +} + +type User struct { + ID snowflake.ID + Name string + PublicKey ed25519.PublicKey +} + +type UsersNetwork struct { + UserID snowflake.ID + NetworkID snowflake.ID +} diff --git a/internal/data/networks.sql.go b/internal/data/networks.sql.go new file mode 100644 index 0000000..1333863 --- /dev/null +++ b/internal/data/networks.sql.go @@ -0,0 +1,74 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: networks.sql + +package data + +import ( + "context" + + "github.com/kyren223/eko/pkg/snowflake" +) + +const createNetwork = `-- name: CreateNetwork :one +INSERT INTO networks ( + id, name, owner_id +) VALUES ( + ?, ?, ? +) +RETURNING id, name, owner_id +` + +type CreateNetworkParams struct { + ID snowflake.ID + Name string + OwnerID snowflake.ID +} + +func (q *Queries) CreateNetwork(ctx context.Context, arg CreateNetworkParams) (Network, error) { + row := q.db.QueryRowContext(ctx, createNetwork, arg.ID, arg.Name, arg.OwnerID) + var i Network + err := row.Scan(&i.ID, &i.Name, &i.OwnerID) + return i, err +} + +const getNetwork = `-- name: GetNetwork :one +SELECT id, name, owner_id FROM networks +WHERE id = ? +` + +func (q *Queries) GetNetwork(ctx context.Context, id snowflake.ID) (Network, error) { + row := q.db.QueryRowContext(ctx, getNetwork, id) + var i Network + err := row.Scan(&i.ID, &i.Name, &i.OwnerID) + return i, err +} + +const listNetworks = `-- name: ListNetworks :many +SELECT id, name, owner_id FROM networks +ORDER BY id +` + +func (q *Queries) ListNetworks(ctx context.Context) ([]Network, error) { + rows, err := q.db.QueryContext(ctx, listNetworks) + if err != nil { + return nil, err + } + defer rows.Close() + var items []Network + for rows.Next() { + var i Network + if err := rows.Scan(&i.ID, &i.Name, &i.OwnerID); 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 +} diff --git a/internal/data/users.sql.go b/internal/data/users.sql.go new file mode 100644 index 0000000..1ca03ce --- /dev/null +++ b/internal/data/users.sql.go @@ -0,0 +1,84 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.27.0 +// source: users.sql + +package data + +import ( + "context" + + "crypto/ed25519" + "github.com/kyren223/eko/pkg/snowflake" +) + +const createUser = `-- name: CreateUser :one +INSERT INTO users ( + id, name, public_key +) VALUES ( + ?, 'User' || abs(random()) % 1000000, ? +) +RETURNING id, name, public_key +` + +type CreateUserParams struct { + ID snowflake.ID + PublicKey ed25519.PublicKey +} + +func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) (User, error) { + row := q.db.QueryRowContext(ctx, createUser, arg.ID, arg.PublicKey) + var i User + err := row.Scan(&i.ID, &i.Name, &i.PublicKey) + return i, err +} + +const getUser = `-- name: GetUser :one +SELECT id, name, public_key FROM users +WHERE id = ? +` + +func (q *Queries) GetUser(ctx context.Context, id snowflake.ID) (User, error) { + row := q.db.QueryRowContext(ctx, getUser, id) + var i User + err := row.Scan(&i.ID, &i.Name, &i.PublicKey) + return i, err +} + +const setUserName = `-- name: SetUserName :one +UPDATE users SET + name = ? +WHERE id = ? +RETURNING id, name, public_key +` + +type SetUserNameParams struct { + Name string + ID snowflake.ID +} + +func (q *Queries) SetUserName(ctx context.Context, arg SetUserNameParams) (User, error) { + row := q.db.QueryRowContext(ctx, setUserName, arg.Name, arg.ID) + var i User + err := row.Scan(&i.ID, &i.Name, &i.PublicKey) + return i, err +} + +const setUserPublicKey = `-- name: SetUserPublicKey :one +UPDATE users SET + public_key = ? +WHERE id = ? +RETURNING id, name, public_key +` + +type SetUserPublicKeyParams struct { + PublicKey ed25519.PublicKey + ID snowflake.ID +} + +func (q *Queries) SetUserPublicKey(ctx context.Context, arg SetUserPublicKeyParams) (User, error) { + row := q.db.QueryRowContext(ctx, setUserPublicKey, arg.PublicKey, arg.ID) + var i User + err := row.Scan(&i.ID, &i.Name, &i.PublicKey) + return i, err +} diff --git a/migrations/20241026174345_init.sql b/migrations/20241026174345_init.sql new file mode 100644 index 0000000..ad1f65f --- /dev/null +++ b/migrations/20241026174345_init.sql @@ -0,0 +1,45 @@ +-- +goose Up +CREATE TABLE messages ( + id INTEGER PRIMARY KEY, + sender_id INT NOT NULL REFERENCES users (id), + content TEXT NOT NULL, + + frequency_id INT REFERENCES frequencies (id), + receiver_id INT REFERENCES users (id), + + CHECK ( + (frequency_id IS NOT NULL AND receiver_id IS NULL) OR + (frequency_id IS NULL AND receiver_id IS NOT NULL) + ) +); + +CREATE TABLE users ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + public_key BLOB NOT NULL +); + +CREATE TABLE networks ( + id INTEGER PRIMARY KEY, + name TEXT NOT NULL, + owner_id INT NOT NULL REFERENCES users (id) +); + +CREATE TABLE frequencies ( + id INTEGER PRIMARY KEY, + network_id INT NOT NULL REFERENCES networks (id), + name TEXT NOT NULL +); + +CREATE TABLE users_networks ( + user_id INT NOT NULL REFERENCES users (id), + network_id INT NOT NULL REFERENCES networks (id), + PRIMARY KEY (user_id, network_id) +); + +-- +goose Down +DROP TABLE messages; +DROP TABLE users; +DROP TABLE networks; +DROP TABLE frequencies; +DROP TABLE users_networks; diff --git a/query/frequencies.sql b/query/frequencies.sql new file mode 100644 index 0000000..ed68c78 --- /dev/null +++ b/query/frequencies.sql @@ -0,0 +1,12 @@ +-- name: GetNetworkFrequencies :many +SELECT * FROM frequencies +WHERE network_id = ? +ORDER BY id; + +-- name: CreateFrequency :one +INSERT INTO frequencies ( + id, network_id, name +) VALUES ( + ?, ?, ? +) +RETURNING *; diff --git a/query/messages.sql b/query/messages.sql new file mode 100644 index 0000000..1e982b1 --- /dev/null +++ b/query/messages.sql @@ -0,0 +1,19 @@ +-- name: ListMessages :many +SELECT * FROM messages +ORDER BY id; + +-- name: CreateDirectMessage :one +INSERT INTO messages ( + id, content, sender_id, receiver_id +) VALUES ( + ?, ?, ?, ? +) +RETURNING *; + +-- name: CreateMessage :one +INSERT INTO messages ( + id, content, sender_id, frequency_id +) VALUES ( + ?, ?, ?, ? +) +RETURNING *; diff --git a/query/networks.sql b/query/networks.sql new file mode 100644 index 0000000..d709975 --- /dev/null +++ b/query/networks.sql @@ -0,0 +1,15 @@ +-- name: ListNetworks :many +SELECT * FROM networks +ORDER BY id; + +-- name: GetNetwork :one +SELECT * FROM networks +WHERE id = ?; + +-- name: CreateNetwork :one +INSERT INTO networks ( + id, name, owner_id +) VALUES ( + ?, ?, ? +) +RETURNING *; diff --git a/query/users.sql b/query/users.sql new file mode 100644 index 0000000..28ca8b9 --- /dev/null +++ b/query/users.sql @@ -0,0 +1,23 @@ +-- name: GetUser :one +SELECT * FROM users +WHERE id = ?; + +-- name: CreateUser :one +INSERT INTO users ( + id, name, public_key +) VALUES ( + ?, 'User' || abs(random()) % 1000000, ? +) +RETURNING *; + +-- name: SetUserName :one +UPDATE users SET + name = ? +WHERE id = ? +RETURNING *; + +-- name: SetUserPublicKey :one +UPDATE users SET + public_key = ? +WHERE id = ? +RETURNING *; diff --git a/sqlc.yml b/sqlc.yml new file mode 100644 index 0000000..237f348 --- /dev/null +++ b/sqlc.yml @@ -0,0 +1,17 @@ +version: "2" +sql: + - engine: "sqlite" + queries: "./query/" + schema: "./migrations" + gen: + go: + package: "data" + out: "./internal/data/" + emit_pointers_for_null_types: true + overrides: + - column: "*.id" + go_type: "github.com/kyren223/eko/pkg/snowflake.ID" + - column: "*.*_id" + go_type: "github.com/kyren223/eko/pkg/snowflake.ID" + - column: "users.public_key" + go_type: "crypto/ed25519.PublicKey" -- cgit v1.3.1