diff --git a/Makefile b/Makefile
index 8ac08fb9493f703554cc05613d006cc3d1f44432..57f50a0c598a35d28a4acaa6fc4cf6b3f761cd15 100644
--- a/Makefile
+++ b/Makefile
@@ -1,6 +1,7 @@
.PHONY: all
all:
go generate ./...
+ go install ./...
# vim:ft=make
diff --git a/folders/messages.go b/folders/messages.go
index 87c9f025457b62c57bd1ae18da2c9bf3b4c7e035..3be061c4dc24d512ba742ff7f12fe4bb7436f42a 100644
--- a/folders/messages.go
+++ b/folders/messages.go
@@ -63,7 +63,7 @@ func ReadMessage(login, folder string, msgid int64) (*storage.Message, error) {
}
// ListMessages lists messages.
-func ListMessages(folder string) ([]storage.ListMessagesRow, error) {
+func ListMessages(folder string) ([]storage.Message, error) {
ctx := context.TODO()
// TODO: options aren't implemented - need to set them?
rows, err := this.Q.ListMessages(ctx, folder)
diff --git a/repl/messages.go b/repl/messages.go
index f8068b165677e68a585d8c913281e5bc3c5a241c..019f176d98eb5a4da7514bd4381a92b26444e24e 100644
--- a/repl/messages.go
+++ b/repl/messages.go
@@ -19,6 +19,10 @@ import (
// messages in the current folder.
func ActionDirectory(cmd *dclish.Command) error {
// TODO: flag parsing.
+ showExpiration := false
+ if cmd.Flags["/EXPIRATION"].Value == "true" {
+ showExpiration = true
+ }
if len(cmd.Args) == 1 {
folder, err := folders.ValidFolder(cmd.Args[0])
if err != nil {
@@ -36,8 +40,7 @@ func ActionDirectory(cmd *dclish.Command) error {
}
fmt.Printf("%4s %-43s %-12s %-10s\n", "#", "Subject", "From", "Date")
for _, msg := range msgs {
- fmt.Printf("%4d %-43s %-12s %-10s\n", msg.ID, msg.Subject, msg.Author,
- msg.CreateAt.Format("2006-05-04 15:02:01"))
+ fmt.Printf("%s\n", msg.OneLine(showExpiration))
}
return nil
diff --git a/storage/display.go b/storage/display.go
index cf41bf664907ca1dd352b8be1f42454f23d29fc0..75155344ae056ec99677f9ff5bf43fc312de4fc7 100644
--- a/storage/display.go
+++ b/storage/display.go
@@ -22,8 +22,8 @@ func (m *Message) String() string {
return buf.String()
}
-// String renders a message row.
-func (m *ListMessagesRow) String(expire bool) string {
+// OneLine renders a message in a line.
+func (m *Message) OneLine(expire bool) string {
var t time.Time
if expire {
t = m.Expiration
diff --git a/storage/folders.sql.go b/storage/folders.sql.go
index cad1cd795e650d8e6d5e383c6d0d6d7a324dbc8a..7b5bc42eaf4e208236a7760e86a1c4b22d077e60 100644
--- a/storage/folders.sql.go
+++ b/storage/folders.sql.go
@@ -61,15 +61,6 @@ func (q *Queries) CreateFolder(ctx context.Context, arg CreateFolderParams) erro
return err
}
-const deleteFolder = `-- name: DeleteFolder :exec
-DELETE FROM folders WHERE name=?
-`
-
-func (q *Queries) DeleteFolder(ctx context.Context, name string) error {
- _, err := q.db.ExecContext(ctx, deleteFolder, name)
- return err
-}
-
const findFolderExact = `-- name: FindFolderExact :one
SELECT name FROM folders where name = ?
`
diff --git a/storage/messages.sql.go b/storage/messages.sql.go
index 5e37783894dc9ae6c1b85b050b7eded2ae459aa1..cf675fa48f064e5da4419f484ea7885862124eac 100644
--- a/storage/messages.sql.go
+++ b/storage/messages.sql.go
@@ -54,70 +54,6 @@ func (q *Queries) GetFirstMessageID(ctx context.Context, folder string) (int64,
return id, err
}
-const listMessages = `-- name: ListMessages :many
-SELECT id, folder, author, subject, message, expiration, create_at, update_at
-FROM messages
-WHERE folder = ?
-`
-
-type ListMessagesRow struct {
- ID int64
- Folder string
- Author string
- Subject string
- Message string
- Expiration time.Time
- CreateAt time.Time
- UpdateAt time.Time
-}
-
-func (q *Queries) ListMessages(ctx context.Context, folder string) ([]ListMessagesRow, error) {
- rows, err := q.db.QueryContext(ctx, listMessages, folder)
- if err != nil {
- return nil, err
- }
- defer rows.Close()
- var items []ListMessagesRow
- for rows.Next() {
- var i ListMessagesRow
- if err := rows.Scan(
- &i.ID,
- &i.Folder,
- &i.Author,
- &i.Subject,
- &i.Message,
- &i.Expiration,
- &i.CreateAt,
- &i.UpdateAt,
- ); 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 markMessage = `-- name: MarkMessage :exec
-INSERT INTO mark (login, folder, msgid) VALUES (?, ?, ?)
-`
-
-type MarkMessageParams struct {
- Login string
- Folder string
- Msgid int64
-}
-
-func (q *Queries) MarkMessage(ctx context.Context, arg MarkMessageParams) error {
- _, err := q.db.ExecContext(ctx, markMessage, arg.Login, arg.Folder, arg.Msgid)
- return err
-}
-
const readMessage = `-- name: ReadMessage :one
SELECT id, folder, author, subject, message, permanent, shutdown, expiration, create_at, update_at FROM messages WHERE folder = ? AND id = ?
`
diff --git a/storage/migrations/1_create_table.up.sql b/storage/migrations/1_create_table.up.sql
index 4899e330808792e09cc999ecce73de52e56ea2bf..863515cede390c0d4325644d4c0f9189af93c5d9 100644
--- a/storage/migrations/1_create_table.up.sql
+++ b/storage/migrations/1_create_table.up.sql
@@ -135,7 +135,7 @@ CREATE TABLE seen (
ON UPDATE CASCADE
) WITHOUT ROWID;
-CREATE TABLE mark (
+CREATE TABLE marks (
login VARCHAR(25) REFERENCES users(login)
ON DELETE CASCADE ON UPDATE CASCADE NOT NULL,
folder VARCHAR(25) REFERENCES folders(name)
@@ -158,7 +158,7 @@ CREATE TABLE folder_access (
) WITHOUT ROWID;
--- User folder configs.
-CREATE TABLE config (
+CREATE TABLE folder_configs (
login VARCHAR(25) REFERENCES users(login)
ON DELETE CASCADE ON UPDATE CASCADE NOT NULL,
folder VARCHAR(25) REFERENCES folders(name)
diff --git a/storage/models.go b/storage/models.go
index ac7da0b7f55da831fd3336c58ae3b620a733227b..ea5558cbbd29ae33e95a32d67b078de035ec0138 100644
--- a/storage/models.go
+++ b/storage/models.go
@@ -8,13 +8,6 @@ import (
"time"
)
-type Config struct {
- Login string
- Folder string
- Always int64
- Alert int64
-}
-
type Folder struct {
Name string
Always int64
@@ -35,6 +28,13 @@ type FolderAccess struct {
Folder string
}
+type FolderConfig struct {
+ Login string
+ Folder string
+ Always int64
+ Alert int64
+}
+
type Mark struct {
Login string
Folder string
diff --git a/storage/queries/folders.sql b/storage/queries/folders.sql
index 7882910b0c6a19c2570d78ea4bb9b254faf3776b..16183321535b352140fc38df3963d1a9abecab54 100644
--- a/storage/queries/folders.sql
+++ b/storage/queries/folders.sql
@@ -36,8 +36,5 @@ SELECT 1 FROM folders AS f LEFT JOIN owners AS o ON f.name = c.folder
-- name: IsFolderOwner :one
SELECT 1 FROM owners WHERE folder = ? AND login = ?;
--- name: DeleteFolder :exec
-DELETE FROM folders WHERE name=?;
-
-- name: GetFolderExpire :one
SELECT expire FROM folders WHERE name = ?;
diff --git a/storage/queries/messages.sql b/storage/queries/messages.sql
index 9f6ea221d4611cb9e046a419ea5c103f64ba8ad7..345619b3088c4c761ae6f83f6a0b905b8bc28101 100644
--- a/storage/queries/messages.sql
+++ b/storage/queries/messages.sql
@@ -8,14 +8,6 @@ INSERT INTO messages (
-- name: SetMessageSeen :exec
INSERT INTO seen (login, folder, msgid) VALUES (?, ?, ?);
--- name: MarkMessage :exec
-INSERT INTO mark (login, folder, msgid) VALUES (?, ?, ?);
-
--- name: ListMessages :many
-SELECT id, folder, author, subject, message, expiration, create_at, update_at
-FROM messages
-WHERE folder = ?;
-
-- name: GetFirstMessageID :one
SELECT id FROM messages WHERE folder = ? and id = MIN(id) GROUP BY folder;
diff --git a/storage/queries/standard.sql b/storage/queries/standard.sql
new file mode 100644
index 0000000000000000000000000000000000000000..cdfe2e4afff983b469b3b4e9035a87eff74bcece
--- /dev/null
+++ b/storage/queries/standard.sql
@@ -0,0 +1,95 @@
+-- name: ListUsers :many
+SELECT * FROM users;
+
+-- name: DeleteUser :exec
+DELETE FROM users WHERE login = ?;
+
+-- name: AddFolder :exec
+INSERT INTO folders (name) VALUES (?);
+
+-- name: ListFolders :many
+SELECT * FROM folders;
+
+-- name: GetFolder :one
+SELECT * FROM folders WHERE name = ?;
+
+-- name: DeleteFolder :exec
+DELETE FROM folders WHERE name = ?;
+
+-- name: AddOwner :exec
+INSERT INTO owners (folder, login) VALUES (?, ?);
+
+-- name: ListOwners :many
+SELECT * FROM owners;
+
+-- name: GetOwner :one
+SELECT * FROM owners WHERE folder = ? AND login = ?;
+
+-- name: DeleteOwner :exec
+DELETE FROM owners WHERE folder = ? AND login = ?;
+
+-- name: AddMessage :exec
+INSERT INTO messages (id, folder) VALUES (?, ?);
+
+-- name: ListMessages :many
+SELECT * FROM messages WHERE folder = ?;
+
+-- name: GetMessage :one
+SELECT * FROM messages WHERE id = ? AND folder = ?;
+
+-- name: DeleteMessage :exec
+DELETE FROM messages WHERE id = ? AND folder = ?;
+
+-- name: AddSeen :exec
+INSERT INTO seen (folder, login, msgid) VALUES (?, ?, ?);
+
+-- name: ListSeen :many
+SELECT * FROM seen;
+
+-- name: GetSeen :one
+SELECT * FROM seen WHERE folder = ? AND login = ? AND msgid = ?;
+
+-- name: DeleteSeen :exec
+DELETE FROM seen WHERE folder = ? AND login = ? AND msgid = ?;
+
+-- name: AddMark :exec
+INSERT INTO marks (folder, login, msgid) VALUES (?, ?, ?);
+
+-- name: ListMark :many
+SELECT * FROM marks;
+
+-- name: GetMark :one
+SELECT * FROM marks WHERE folder = ? AND login = ? AND msgid = ?;
+
+-- name: DeleteMark :exec
+DELETE FROM marks WHERE folder = ? AND login = ? AND msgid = ?;
+
+-- name: AddFolderAccess :exec
+INSERT INTO folder_access (login, folder) VALUES (?, ?);
+
+-- name: ListFolderAccess :many
+SELECT * FROM folder_access;
+
+-- name: GetFolderAccess :one
+SELECT * FROM folder_access WHERE login = ? AND folder = ?;
+
+-- name: DeleteFolderAccess :exec
+DELETE FROM folder_access WHERE login = ? AND folder = ?;
+
+-- name: AddFolderConfig :exec
+INSERT INTO folder_configs (login, folder) VALUES (?, ?);
+
+-- name: ListFolderConfig :many
+SELECT * FROM folder_configs;
+
+-- name: GetFolderConfig :one
+SELECT * FROM folder_configs WHERE login = ? AND folder = ?;
+
+-- name: DeleteFolderConfig :exec
+DELETE FROM folder_configs WHERE login = ? AND folder = ?;
+
+-- name: AddSystem :exec
+INSERT INTO system (name) VALUES (?);
+
+-- name: GetSystem :one
+SELECT * FROM system WHERE name = ?;
diff --git a/storage/standard.sql.go b/storage/standard.sql.go
new file mode 100644
index 0000000000000000000000000000000000000000..5e464f92a2830b038f19f512acbd54a7f5e3c885
--- /dev/null
+++ b/storage/standard.sql.go
@@ -0,0 +1,632 @@
+// Code generated by sqlc. DO NOT EDIT.
+// versions:
+// sqlc v1.29.0
+// source: standard.sql
+
+package storage
+
+import (
+ "context"
+)
+
+const addFolder = `-- name: AddFolder :exec
+INSERT INTO folders (name) VALUES (?)
+`
+
+func (q *Queries) AddFolder(ctx context.Context, name string) error {
+ _, err := q.db.ExecContext(ctx, addFolder, name)
+ return err
+}
+
+const addFolderAccess = `-- name: AddFolderAccess :exec
+INSERT INTO folder_access (login, folder) VALUES (?, ?)
+`
+
+type AddFolderAccessParams struct {
+ Login string
+ Folder string
+}
+
+func (q *Queries) AddFolderAccess(ctx context.Context, arg AddFolderAccessParams) error {
+ _, err := q.db.ExecContext(ctx, addFolderAccess, arg.Login, arg.Folder)
+ return err
+}
+
+const addFolderConfig = `-- name: AddFolderConfig :exec
+INSERT INTO folder_configs (login, folder) VALUES (?, ?)
+`
+
+type AddFolderConfigParams struct {
+ Login string
+ Folder string
+}
+
+func (q *Queries) AddFolderConfig(ctx context.Context, arg AddFolderConfigParams) error {
+ _, err := q.db.ExecContext(ctx, addFolderConfig, arg.Login, arg.Folder)
+ return err
+}
+
+const addMark = `-- name: AddMark :exec
+INSERT INTO marks (folder, login, msgid) VALUES (?, ?, ?)
+`
+
+type AddMarkParams struct {
+ Folder string
+ Login string
+ Msgid int64
+}
+
+func (q *Queries) AddMark(ctx context.Context, arg AddMarkParams) error {
+ _, err := q.db.ExecContext(ctx, addMark, arg.Folder, arg.Login, arg.Msgid)
+ return err
+}
+
+const addMessage = `-- name: AddMessage :exec
+INSERT INTO messages (id, folder) VALUES (?, ?)
+`
+
+type AddMessageParams struct {
+ ID int64
+ Folder string
+}
+
+func (q *Queries) AddMessage(ctx context.Context, arg AddMessageParams) error {
+ _, err := q.db.ExecContext(ctx, addMessage, arg.ID, arg.Folder)
+ return err
+}
+
+const addOwner = `-- name: AddOwner :exec
+INSERT INTO owners (folder, login) VALUES (?, ?)
+`
+
+type AddOwnerParams struct {
+ Folder string
+ Login string
+}
+
+func (q *Queries) AddOwner(ctx context.Context, arg AddOwnerParams) error {
+ _, err := q.db.ExecContext(ctx, addOwner, arg.Folder, arg.Login)
+ return err
+}
+
+const addSeen = `-- name: AddSeen :exec
+INSERT INTO seen (folder, login, msgid) VALUES (?, ?, ?)
+`
+
+type AddSeenParams struct {
+ Folder string
+ Login string
+ Msgid int64
+}
+
+func (q *Queries) AddSeen(ctx context.Context, arg AddSeenParams) error {
+ _, err := q.db.ExecContext(ctx, addSeen, arg.Folder, arg.Login, arg.Msgid)
+ return err
+}
+
+const addSystem = `-- name: AddSystem :exec
+INSERT INTO system (name) VALUES (?)
+`
+
+func (q *Queries) AddSystem(ctx context.Context, name string) error {
+ _, err := q.db.ExecContext(ctx, addSystem, name)
+ return err
+}
+
+const deleteFolder = `-- name: DeleteFolder :exec
+DELETE FROM folders WHERE name = ?
+`
+
+func (q *Queries) DeleteFolder(ctx context.Context, name string) error {
+ _, err := q.db.ExecContext(ctx, deleteFolder, name)
+ return err
+}
+
+const deleteFolderAccess = `-- name: DeleteFolderAccess :exec
+DELETE FROM folder_access WHERE login = ? AND folder = ?
+`
+
+type DeleteFolderAccessParams struct {
+ Login string
+ Folder string
+}
+
+func (q *Queries) DeleteFolderAccess(ctx context.Context, arg DeleteFolderAccessParams) error {
+ _, err := q.db.ExecContext(ctx, deleteFolderAccess, arg.Login, arg.Folder)
+ return err
+}
+
+const deleteFolderConfig = `-- name: DeleteFolderConfig :exec
+DELETE FROM folder_configs WHERE login = ? AND folder = ?
+`
+
+type DeleteFolderConfigParams struct {
+ Login string
+ Folder string
+}
+
+func (q *Queries) DeleteFolderConfig(ctx context.Context, arg DeleteFolderConfigParams) error {
+ _, err := q.db.ExecContext(ctx, deleteFolderConfig, arg.Login, arg.Folder)
+ return err
+}
+
+const deleteMark = `-- name: DeleteMark :exec
+DELETE FROM marks WHERE folder = ? AND login = ? AND msgid = ?
+`
+
+type DeleteMarkParams struct {
+ Folder string
+ Login string
+ Msgid int64
+}
+
+func (q *Queries) DeleteMark(ctx context.Context, arg DeleteMarkParams) error {
+ _, err := q.db.ExecContext(ctx, deleteMark, arg.Folder, arg.Login, arg.Msgid)
+ return err
+}
+
+const deleteMessage = `-- name: DeleteMessage :exec
+DELETE FROM messages WHERE id = ? AND folder = ?
+`
+
+type DeleteMessageParams struct {
+ ID int64
+ Folder string
+}
+
+func (q *Queries) DeleteMessage(ctx context.Context, arg DeleteMessageParams) error {
+ _, err := q.db.ExecContext(ctx, deleteMessage, arg.ID, arg.Folder)
+ return err
+}
+
+const deleteOwner = `-- name: DeleteOwner :exec
+DELETE FROM owners WHERE folder = ? AND login = ?
+`
+
+type DeleteOwnerParams struct {
+ Folder string
+ Login string
+}
+
+func (q *Queries) DeleteOwner(ctx context.Context, arg DeleteOwnerParams) error {
+ _, err := q.db.ExecContext(ctx, deleteOwner, arg.Folder, arg.Login)
+ return err
+}
+
+const deleteSeen = `-- name: DeleteSeen :exec
+DELETE FROM seen WHERE folder = ? AND login = ? AND msgid = ?
+`
+
+type DeleteSeenParams struct {
+ Folder string
+ Login string
+ Msgid int64
+}
+
+func (q *Queries) DeleteSeen(ctx context.Context, arg DeleteSeenParams) error {
+ _, err := q.db.ExecContext(ctx, deleteSeen, arg.Folder, arg.Login, arg.Msgid)
+ return err
+}
+
+const deleteUser = `-- name: DeleteUser :exec
+DELETE FROM users WHERE login = ?
+`
+
+func (q *Queries) DeleteUser(ctx context.Context, login string) error {
+ _, err := q.db.ExecContext(ctx, deleteUser, login)
+ return err
+}
+
+const getFolder = `-- name: GetFolder :one
+SELECT name, "always", brief, description, notify, readnew, shownew, system, expire, visibility, create_at, update_at FROM folders WHERE name = ?
+`
+
+func (q *Queries) GetFolder(ctx context.Context, name string) (Folder, error) {
+ row := q.db.QueryRowContext(ctx, getFolder, name)
+ var i Folder
+ err := row.Scan(
+ &i.Name,
+ &i.Always,
+ &i.Brief,
+ &i.Description,
+ &i.Notify,
+ &i.Readnew,
+ &i.Shownew,
+ &i.System,
+ &i.Expire,
+ &i.Visibility,
+ &i.CreateAt,
+ &i.UpdateAt,
+ )
+ return i, err
+}
+
+const getFolderAccess = `-- name: GetFolderAccess :one
+SELECT login, folder FROM folder_access WHERE login = ? AND folder = ?
+`
+
+type GetFolderAccessParams struct {
+ Login string
+ Folder string
+}
+
+func (q *Queries) GetFolderAccess(ctx context.Context, arg GetFolderAccessParams) (FolderAccess, error) {
+ row := q.db.QueryRowContext(ctx, getFolderAccess, arg.Login, arg.Folder)
+ var i FolderAccess
+ err := row.Scan(&i.Login, &i.Folder)
+ return i, err
+}
+
+const getFolderConfig = `-- name: GetFolderConfig :one
+SELECT login, folder, "always", alert FROM folder_configs WHERE login = ? AND folder = ?
+`
+
+type GetFolderConfigParams struct {
+ Login string
+ Folder string
+}
+
+func (q *Queries) GetFolderConfig(ctx context.Context, arg GetFolderConfigParams) (FolderConfig, error) {
+ row := q.db.QueryRowContext(ctx, getFolderConfig, arg.Login, arg.Folder)
+ var i FolderConfig
+ err := row.Scan(
+ &i.Login,
+ &i.Folder,
+ &i.Always,
+ &i.Alert,
+ )
+ return i, err
+}
+
+const getMark = `-- name: GetMark :one
+SELECT login, folder, msgid FROM marks WHERE folder = ? AND login = ? AND msgid = ?
+`
+
+type GetMarkParams struct {
+ Folder string
+ Login string
+ Msgid int64
+}
+
+func (q *Queries) GetMark(ctx context.Context, arg GetMarkParams) (Mark, error) {
+ row := q.db.QueryRowContext(ctx, getMark, arg.Folder, arg.Login, arg.Msgid)
+ var i Mark
+ err := row.Scan(&i.Login, &i.Folder, &i.Msgid)
+ return i, err
+}
+
+const getMessage = `-- name: GetMessage :one
+SELECT id, folder, author, subject, message, permanent, shutdown, expiration, create_at, update_at FROM messages WHERE id = ? AND folder = ?
+`
+
+type GetMessageParams struct {
+ ID int64
+ Folder string
+}
+
+func (q *Queries) GetMessage(ctx context.Context, arg GetMessageParams) (Message, error) {
+ row := q.db.QueryRowContext(ctx, getMessage, arg.ID, arg.Folder)
+ var i Message
+ err := row.Scan(
+ &i.ID,
+ &i.Folder,
+ &i.Author,
+ &i.Subject,
+ &i.Message,
+ &i.Permanent,
+ &i.Shutdown,
+ &i.Expiration,
+ &i.CreateAt,
+ &i.UpdateAt,
+ )
+ return i, err
+}
+
+const getOwner = `-- name: GetOwner :one
+SELECT folder, login, create_at, update_at FROM owners WHERE folder = ? AND login = ?
+`
+
+type GetOwnerParams struct {
+ Folder string
+ Login string
+}
+
+func (q *Queries) GetOwner(ctx context.Context, arg GetOwnerParams) (Owner, error) {
+ row := q.db.QueryRowContext(ctx, getOwner, arg.Folder, arg.Login)
+ var i Owner
+ err := row.Scan(
+ &i.Folder,
+ &i.Login,
+ &i.CreateAt,
+ &i.UpdateAt,
+ )
+ return i, err
+}
+
+const getSeen = `-- name: GetSeen :one
+SELECT login, folder, msgid FROM seen WHERE folder = ? AND login = ? AND msgid = ?
+`
+
+type GetSeenParams struct {
+ Folder string
+ Login string
+ Msgid int64
+}
+
+func (q *Queries) GetSeen(ctx context.Context, arg GetSeenParams) (Seen, error) {
+ row := q.db.QueryRowContext(ctx, getSeen, arg.Folder, arg.Login, arg.Msgid)
+ var i Seen
+ err := row.Scan(&i.Login, &i.Folder, &i.Msgid)
+ return i, err
+}
+
+const getSystem = `-- name: GetSystem :one
+SELECT name, default_expire, expire_limit FROM system WHERE name = ?
+`
+
+func (q *Queries) GetSystem(ctx context.Context, name string) (System, error) {
+ row := q.db.QueryRowContext(ctx, getSystem, name)
+ var i System
+ err := row.Scan(&i.Name, &i.DefaultExpire, &i.ExpireLimit)
+ return i, err
+}
+
+const listFolderAccess = `-- name: ListFolderAccess :many
+SELECT login, folder FROM folder_access
+`
+
+func (q *Queries) ListFolderAccess(ctx context.Context) ([]FolderAccess, error) {
+ rows, err := q.db.QueryContext(ctx, listFolderAccess)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+ var items []FolderAccess
+ for rows.Next() {
+ var i FolderAccess
+ if err := rows.Scan(&i.Login, &i.Folder); 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 listFolderConfig = `-- name: ListFolderConfig :many
+SELECT login, folder, "always", alert FROM folder_configs
+`
+
+func (q *Queries) ListFolderConfig(ctx context.Context) ([]FolderConfig, error) {
+ rows, err := q.db.QueryContext(ctx, listFolderConfig)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+ var items []FolderConfig
+ for rows.Next() {
+ var i FolderConfig
+ if err := rows.Scan(
+ &i.Login,
+ &i.Folder,
+ &i.Always,
+ &i.Alert,
+ ); 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 listFolders = `-- name: ListFolders :many
+SELECT name, "always", brief, description, notify, readnew, shownew, system, expire, visibility, create_at, update_at FROM folders
+`
+
+func (q *Queries) ListFolders(ctx context.Context) ([]Folder, error) {
+ rows, err := q.db.QueryContext(ctx, listFolders)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+ var items []Folder
+ for rows.Next() {
+ var i Folder
+ if err := rows.Scan(
+ &i.Name,
+ &i.Always,
+ &i.Brief,
+ &i.Description,
+ &i.Notify,
+ &i.Readnew,
+ &i.Shownew,
+ &i.System,
+ &i.Expire,
+ &i.Visibility,
+ &i.CreateAt,
+ &i.UpdateAt,
+ ); 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 listMark = `-- name: ListMark :many
+SELECT login, folder, msgid FROM marks
+`
+
+func (q *Queries) ListMark(ctx context.Context) ([]Mark, error) {
+ rows, err := q.db.QueryContext(ctx, listMark)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+ var items []Mark
+ for rows.Next() {
+ var i Mark
+ if err := rows.Scan(&i.Login, &i.Folder, &i.Msgid); 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 listMessages = `-- name: ListMessages :many
+SELECT id, folder, author, subject, message, permanent, shutdown, expiration, create_at, update_at FROM messages WHERE folder = ?
+`
+
+func (q *Queries) ListMessages(ctx context.Context, folder string) ([]Message, error) {
+ rows, err := q.db.QueryContext(ctx, listMessages, folder)
+ 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.Folder,
+ &i.Author,
+ &i.Subject,
+ &i.Message,
+ &i.Permanent,
+ &i.Shutdown,
+ &i.Expiration,
+ &i.CreateAt,
+ &i.UpdateAt,
+ ); 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 listOwners = `-- name: ListOwners :many
+SELECT folder, login, create_at, update_at FROM owners
+`
+
+func (q *Queries) ListOwners(ctx context.Context) ([]Owner, error) {
+ rows, err := q.db.QueryContext(ctx, listOwners)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+ var items []Owner
+ for rows.Next() {
+ var i Owner
+ if err := rows.Scan(
+ &i.Folder,
+ &i.Login,
+ &i.CreateAt,
+ &i.UpdateAt,
+ ); 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 listSeen = `-- name: ListSeen :many
+SELECT login, folder, msgid FROM seen
+`
+
+func (q *Queries) ListSeen(ctx context.Context) ([]Seen, error) {
+ rows, err := q.db.QueryContext(ctx, listSeen)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+ var items []Seen
+ for rows.Next() {
+ var i Seen
+ if err := rows.Scan(&i.Login, &i.Folder, &i.Msgid); 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 listUsers = `-- name: ListUsers :many
+SELECT login, name, admin, moderator, alert, disabled, last_login, create_at, update_at FROM users
+`
+
+func (q *Queries) ListUsers(ctx context.Context) ([]User, error) {
+ rows, err := q.db.QueryContext(ctx, listUsers)
+ if err != nil {
+ return nil, err
+ }
+ defer rows.Close()
+ var items []User
+ for rows.Next() {
+ var i User
+ if err := rows.Scan(
+ &i.Login,
+ &i.Name,
+ &i.Admin,
+ &i.Moderator,
+ &i.Alert,
+ &i.Disabled,
+ &i.LastLogin,
+ &i.CreateAt,
+ &i.UpdateAt,
+ ); 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
+}