Added frequency queries

This commit is contained in:
2024-11-23 20:27:10 +02:00
parent 77d9971982
commit b67ab26b89
9 changed files with 202 additions and 38 deletions

View File

@@ -13,9 +13,12 @@ import (
const createFrequency = `-- name: CreateFrequency :one
INSERT INTO frequencies (
id, network_id, name
id, network_id,
name, hex_color,
perms, position
) VALUES (
?, ?, ?
?, ?, ?, ?, ?,
(SELECT COUNT(*) FROM frequencies WHERE network_id = ?)
)
RETURNING id, network_id, name, hex_color, perms, position
`
@@ -24,10 +27,18 @@ type CreateFrequencyParams struct {
ID snowflake.ID
NetworkID snowflake.ID
Name string
HexColor *string
Perms int64
}
func (q *Queries) CreateFrequency(ctx context.Context, arg CreateFrequencyParams) (Frequency, error) {
row := q.db.QueryRowContext(ctx, createFrequency, arg.ID, arg.NetworkID, arg.Name)
row := q.db.QueryRowContext(ctx, createFrequency,
arg.ID,
arg.NetworkID,
arg.Name,
arg.HexColor,
arg.Perms,
)
var i Frequency
err := row.Scan(
&i.ID,
@@ -40,6 +51,15 @@ func (q *Queries) CreateFrequency(ctx context.Context, arg CreateFrequencyParams
return i, err
}
const deleteFrequency = `-- name: DeleteFrequency :exec
DELETE FROM frequencies WHERE id = ?
`
func (q *Queries) DeleteFrequency(ctx context.Context, id snowflake.ID) error {
_, err := q.db.ExecContext(ctx, deleteFrequency, id)
return err
}
const getNetworkFrequencies = `-- name: GetNetworkFrequencies :many
SELECT id, network_id, name, hex_color, perms, position FROM frequencies
WHERE network_id = ?
@@ -75,3 +95,23 @@ func (q *Queries) GetNetworkFrequencies(ctx context.Context, networkID snowflake
}
return items, nil
}
const swapFrequencies = `-- name: SwapFrequencies :exec
UPDATE frequencies SET
position = CASE
WHEN position = ? THEN ?
WHEN position = ? THEN ?
END
WHERE network_id = ? AND position IN (?, ?)
`
type SwapFrequenciesParams struct {
Pos1 int64
Pos2 int64
NetworkID snowflake.ID
}
func (q *Queries) SwapFrequencies(ctx context.Context, arg SwapFrequenciesParams) error {
_, err := q.db.ExecContext(ctx, swapFrequencies, arg.Pos1, arg.Pos2, arg.NetworkID)
return err
}

View File

@@ -49,7 +49,7 @@ type User struct {
Name string
PublicKey ed25519.PublicKey
Description *string
IsPublicDm bool
IsPublicDM bool
IsDeleted bool
}

View File

@@ -11,8 +11,63 @@ import (
"github.com/kyren223/eko/pkg/snowflake"
)
const createNetwork = `-- name: CreateNetwork :one
INSERT INTO networks (
id, owner_id, name, is_public,
icon, bg_hex_color, fg_hex_color
) VALUES (
?, ?, ?, ?, ?, ?, ?
)
RETURNING id, owner_id, name, icon, bg_hex_color, fg_hex_color, is_public
`
type CreateNetworkParams struct {
ID snowflake.ID
OwnerID snowflake.ID
Name string
IsPublic bool
Icon string
BgHexColor *string
FgHexColor string
}
func (q *Queries) CreateNetwork(ctx context.Context, arg CreateNetworkParams) (Network, error) {
row := q.db.QueryRowContext(ctx, createNetwork,
arg.ID,
arg.OwnerID,
arg.Name,
arg.IsPublic,
arg.Icon,
arg.BgHexColor,
arg.FgHexColor,
)
var i Network
err := row.Scan(
&i.ID,
&i.OwnerID,
&i.Name,
&i.Icon,
&i.BgHexColor,
&i.FgHexColor,
&i.IsPublic,
)
return i, err
}
const deleteNetwork = `-- name: DeleteNetwork :exec
DELETE FROM networks WHERE id = ?
`
func (q *Queries) DeleteNetwork(ctx context.Context, id snowflake.ID) error {
_, err := q.db.ExecContext(ctx, deleteNetwork, id)
return err
}
const getBannedUsersInNetwork = `-- name: GetBannedUsersInNetwork :many
SELECT users.id, users.name, users.public_key, users.description, users.is_public_dm, users.is_deleted, network_banned_users.banned_at, network_banned_users.reason
SELECT
users.id, users.name, users.public_key, users.description, users.is_public_dm, users.is_deleted,
network_banned_users.banned_at,
network_banned_users.reason
FROM network_banned_users
JOIN users ON users.id = network_banned_users.banned_user_id
WHERE network_banned_users.network_id = ?
@@ -38,7 +93,7 @@ func (q *Queries) GetBannedUsersInNetwork(ctx context.Context, networkID snowfla
&i.User.Name,
&i.User.PublicKey,
&i.User.Description,
&i.User.IsPublicDm,
&i.User.IsPublicDM,
&i.User.IsDeleted,
&i.BannedAt,
&i.Reason,
@@ -111,3 +166,54 @@ func (q *Queries) GetPublicNetworks(ctx context.Context) ([]Network, error) {
}
return items, nil
}
const getUsersInNetwork = `-- name: GetUsersInNetwork :many
SELECT
users.id, users.name, users.public_key, users.description, users.is_public_dm, users.is_deleted,
users_networks.joined_at,
users_networks.is_admin,
users_networks.is_muted
FROM users_networks
JOIN users ON users.id = users_networks.user_id
WHERE users_networks.network_id = ?
`
type GetUsersInNetworkRow struct {
User User
JoinedAt string
IsAdmin bool
IsMuted bool
}
func (q *Queries) GetUsersInNetwork(ctx context.Context, networkID snowflake.ID) ([]GetUsersInNetworkRow, error) {
rows, err := q.db.QueryContext(ctx, getUsersInNetwork, networkID)
if err != nil {
return nil, err
}
defer rows.Close()
var items []GetUsersInNetworkRow
for rows.Next() {
var i GetUsersInNetworkRow
if err := rows.Scan(
&i.User.ID,
&i.User.Name,
&i.User.PublicKey,
&i.User.Description,
&i.User.IsPublicDM,
&i.User.IsDeleted,
&i.JoinedAt,
&i.IsAdmin,
&i.IsMuted,
); 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
}

View File

@@ -35,31 +35,21 @@ func (q *Queries) CreateUser(ctx context.Context, arg CreateUserParams) (User, e
&i.Name,
&i.PublicKey,
&i.Description,
&i.IsPublicDm,
&i.IsPublicDM,
&i.IsDeleted,
)
return i, err
}
const deleteUser = `-- name: DeleteUser :one
const deleteUser = `-- name: DeleteUser :exec
UPDATE users SET
is_deleted = true
WHERE id = ? AND is_deleted = false
RETURNING id, name, public_key, description, is_public_dm, is_deleted
`
func (q *Queries) DeleteUser(ctx context.Context, id snowflake.ID) (User, error) {
row := q.db.QueryRowContext(ctx, deleteUser, id)
var i User
err := row.Scan(
&i.ID,
&i.Name,
&i.PublicKey,
&i.Description,
&i.IsPublicDm,
&i.IsDeleted,
)
return i, err
func (q *Queries) DeleteUser(ctx context.Context, id snowflake.ID) error {
_, err := q.db.ExecContext(ctx, deleteUser, id)
return err
}
const getDeletedUserById = `-- name: GetDeletedUserById :one
@@ -75,7 +65,7 @@ func (q *Queries) GetDeletedUserById(ctx context.Context, id snowflake.ID) (User
&i.Name,
&i.PublicKey,
&i.Description,
&i.IsPublicDm,
&i.IsPublicDM,
&i.IsDeleted,
)
return i, err
@@ -94,7 +84,7 @@ func (q *Queries) GetUserById(ctx context.Context, id snowflake.ID) (User, error
&i.Name,
&i.PublicKey,
&i.Description,
&i.IsPublicDm,
&i.IsPublicDM,
&i.IsDeleted,
)
return i, err
@@ -113,7 +103,7 @@ func (q *Queries) GetUserByPublicKey(ctx context.Context, publicKey ed25519.Publ
&i.Name,
&i.PublicKey,
&i.Description,
&i.IsPublicDm,
&i.IsPublicDM,
&i.IsDeleted,
)
return i, err
@@ -139,7 +129,7 @@ func (q *Queries) SetUserDescription(ctx context.Context, arg SetUserDescription
&i.Name,
&i.PublicKey,
&i.Description,
&i.IsPublicDm,
&i.IsPublicDM,
&i.IsDeleted,
)
return i, err
@@ -165,7 +155,7 @@ func (q *Queries) SetUserName(ctx context.Context, arg SetUserNameParams) (User,
&i.Name,
&i.PublicKey,
&i.Description,
&i.IsPublicDm,
&i.IsPublicDM,
&i.IsDeleted,
)
return i, err
@@ -179,19 +169,19 @@ RETURNING id, name, public_key, description, is_public_dm, is_deleted
`
type SetUserPublicDMsParams struct {
IsPublicDm bool
IsPublicDM bool
ID snowflake.ID
}
func (q *Queries) SetUserPublicDMs(ctx context.Context, arg SetUserPublicDMsParams) (User, error) {
row := q.db.QueryRowContext(ctx, setUserPublicDMs, arg.IsPublicDm, arg.ID)
row := q.db.QueryRowContext(ctx, setUserPublicDMs, arg.IsPublicDM, arg.ID)
var i User
err := row.Scan(
&i.ID,
&i.Name,
&i.PublicKey,
&i.Description,
&i.IsPublicDm,
&i.IsPublicDM,
&i.IsDeleted,
)
return i, err
@@ -217,7 +207,7 @@ func (q *Queries) SetUserPublicKey(ctx context.Context, arg SetUserPublicKeyPara
&i.Name,
&i.PublicKey,
&i.Description,
&i.IsPublicDm,
&i.IsPublicDM,
&i.IsDeleted,
)
return i, err

View File

@@ -91,6 +91,16 @@ BEGIN
END
-- +goose StatementEnd
-- +goose StatementBegin
CREATE TRIGGER on_frequency_delete
AFTER DELETE ON frequencies
BEGIN
UPDATE frequencies SET
position = position - 1
WHERE network_id = OLD.network_id AND position > OLD.position;
END
-- +goose StatementEnd
-- +goose Down
DROP TABLE messages;
DROP TABLE users;

View File

@@ -5,8 +5,22 @@ ORDER BY id;
-- name: CreateFrequency :one
INSERT INTO frequencies (
id, network_id, name
id, network_id,
name, hex_color,
perms, position
) VALUES (
?, ?, ?
?, @network_id, ?, ?, ?,
(SELECT COUNT(*) FROM frequencies WHERE network_id = @network_id)
)
RETURNING *;
-- name: SwapFrequencies :exec
UPDATE frequencies SET
position = CASE
WHEN position = @pos1 THEN @pos2
WHEN position = @pos2 THEN @pos1
END
WHERE network_id = ? AND position IN (@pos1, @pos2);
-- name: DeleteFrequency :exec
DELETE FROM frequencies WHERE id = ?;

View File

@@ -6,7 +6,7 @@ WHERE is_public = true;
SELECT * FROM networks
WHERE id = ?;
-- -- name: CreateNetwork :one
-- name: CreateNetwork :one
INSERT INTO networks (
id, owner_id, name, is_public,
icon, bg_hex_color, fg_hex_color
@@ -16,7 +16,7 @@ INSERT INTO networks (
RETURNING *;
-- name: GetBannedUsersInNetwork :many
SELECT
SELECT
sqlc.embed(users),
network_banned_users.banned_at,
network_banned_users.reason
@@ -26,10 +26,13 @@ WHERE network_banned_users.network_id = ?;
-- name: GetUsersInNetwork :many
SELECT
sqlc.embed(users.),
sqlc.embed(users),
users_networks.joined_at,
users_networks.is_admin,
users_networks.is_muted
FROM users_networks
JOIN users ON users.id = users_networks.user_id
WHERE users_networks.network_id = ?;
-- name: DeleteNetwork :exec
DELETE FROM networks WHERE id = ?;

View File

@@ -42,8 +42,7 @@ UPDATE users SET
WHERE id = ? AND is_deleted = false
RETURNING *;
-- name: DeleteUser :one
-- name: DeleteUser :exec
UPDATE users SET
is_deleted = true
WHERE id = ? AND is_deleted = false
RETURNING *;
WHERE id = ? AND is_deleted = false;

View File

@@ -19,3 +19,5 @@ sql:
go_type: "github.com/kyren223/eko/pkg/snowflake.ID"
- column: "*.*_id"
go_type: "github.com/kyren223/eko/pkg/snowflake.ID"
rename:
is_public_dm: "IsPublicDM"