diff --git a/api/email.go b/api/email.go index a1efd69..77f9d3a 100644 --- a/api/email.go +++ b/api/email.go @@ -333,7 +333,7 @@ func (h *EmailHandler) handleAccountInfo(w http.ResponseWriter, r *http.Request) return } - accountInfo, err := h.emailService.GetAccountInfo(r.Context(), &account) + accountInfo, err := h.emailService.GetAccountInfo(r.Context(), account) if err != nil { errors.HandleError(w, r, err) return @@ -377,7 +377,7 @@ func (h *EmailHandler) handleRemoveAccount(w http.ResponseWriter, r *http.Reques if err := h.authService.Authorize(&config.AuthRequest{ User: user, - Ressource: &account, + Ressource: account, Actions: []string{auth.ActionDelete}, Context: r.Context(), }); err != nil { @@ -406,7 +406,7 @@ func (h *EmailHandler) handleShareAccount(w http.ResponseWriter, r *http.Request if err := h.authService.Authorize(&config.AuthRequest{ User: user, - Ressource: &account, + Ressource: account, Actions: []string{auth.ActionShare}, Context: r.Context(), }); err != nil { @@ -447,7 +447,7 @@ func (h *EmailHandler) handleRemoveAccountShare(w http.ResponseWriter, r *http.R if err := h.authService.Authorize(&config.AuthRequest{ User: user, - Ressource: &account, + Ressource: account, Actions: []string{auth.ActionShare}, Context: r.Context(), }); err != nil { @@ -461,12 +461,7 @@ func (h *EmailHandler) handleRemoveAccountShare(w http.ResponseWriter, r *http.R return } - params := repository.DeleteShareParams{ - UserId: sharingUser.ID, - Account: account.ID, - } - - if err := h.emailService.RemoveShare(r.Context(), params); err != nil { + if err := h.emailService.RemoveShare(r.Context(), sharingUser.ID, account.ID); err != nil { errors.HandleError(w, r, err) return } diff --git a/database/repository/email.sql.go b/database/repository/email.sql.go index 5f06ef0..38ca958 100644 --- a/database/repository/email.sql.go +++ b/database/repository/email.sql.go @@ -84,13 +84,8 @@ DELETE FROM "mail_share" WHERE "userId" = $1 AND "account" = $2 ` -type DeleteShareParams struct { - UserId int32 `json:"userId"` - Account int32 `json:"account"` -} - -func (q *Queries) DeleteShare(ctx context.Context, arg DeleteShareParams) error { - _, err := q.db.Exec(ctx, deleteShare, arg.UserId, arg.Account) +func (q *Queries) DeleteShare(ctx context.Context, userId int32, account int32) error { + _, err := q.db.Exec(ctx, deleteShare, userId, account) return err } @@ -101,7 +96,7 @@ WHERE m."email" = $1 LIMIT 1 ` -func (q *Queries) GetMailAccountByEmail(ctx context.Context, email string) (MailAccount, error) { +func (q *Queries) GetMailAccountByEmail(ctx context.Context, email string) (*MailAccount, error) { row := q.db.QueryRow(ctx, getMailAccountByEmail, email) var i MailAccount err := row.Scan( @@ -112,7 +107,7 @@ func (q *Queries) GetMailAccountByEmail(ctx context.Context, email string) (Mail &i.Username, &i.Password, ) - return i, err + return &i, err } const getMailAccountById = `-- name: GetMailAccountById :one @@ -122,7 +117,7 @@ WHERE m."id" = $1 LIMIT 1 ` -func (q *Queries) GetMailAccountById(ctx context.Context, id int32) (MailAccount, error) { +func (q *Queries) GetMailAccountById(ctx context.Context, id int32) (*MailAccount, error) { row := q.db.QueryRow(ctx, getMailAccountById, id) var i MailAccount err := row.Scan( @@ -133,7 +128,7 @@ func (q *Queries) GetMailAccountById(ctx context.Context, id int32) (MailAccount &i.Username, &i.Password, ) - return i, err + return &i, err } const listAccountShares = `-- name: ListAccountShares :many @@ -168,13 +163,13 @@ WHERE "mail_accounts"."ownerId" = $1 OR "mail_share"."userId" = $1 ORDER BY "mail_accounts"."id" ` -func (q *Queries) ListUserMailAccounts(ctx context.Context, ownerid int32) ([]MailAccount, error) { +func (q *Queries) ListUserMailAccounts(ctx context.Context, ownerid int32) ([]*MailAccount, error) { rows, err := q.db.Query(ctx, listUserMailAccounts, ownerid) if err != nil { return nil, err } defer rows.Close() - var items []MailAccount + var items []*MailAccount for rows.Next() { var i MailAccount if err := rows.Scan( @@ -187,7 +182,7 @@ func (q *Queries) ListUserMailAccounts(ctx context.Context, ownerid int32) ([]Ma ); err != nil { return nil, err } - items = append(items, i) + items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err diff --git a/database/repository/querier.go b/database/repository/querier.go new file mode 100644 index 0000000..3e99467 --- /dev/null +++ b/database/repository/querier.go @@ -0,0 +1,38 @@ +// Code generated by sqlc. DO NOT EDIT. +// versions: +// sqlc v1.30.0 + +package repository + +import ( + "context" +) + +type Querier interface { + AddEmailAccount(ctx context.Context, arg AddEmailAccountParams) (int32, error) + AddSession(ctx context.Context, arg AddSessionParams) (*UserSession, error) + AddShare(ctx context.Context, arg AddShareParams) error + AddUser(ctx context.Context, arg AddUserParams) (*User, error) + ClearUserSessions(ctx context.Context, userid int32) error + CountUserMailAccounts(ctx context.Context, ownerid int32) (int64, error) + DeleteMailAccount(ctx context.Context, id int32) error + DeleteSessionByHash(ctx context.Context, tokenhash string) error + DeleteSessionById(ctx context.Context, userId int32, iD int32) error + DeleteShare(ctx context.Context, userId int32, account int32) error + GetMailAccountByEmail(ctx context.Context, email string) (*MailAccount, error) + GetMailAccountById(ctx context.Context, id int32) (*MailAccount, error) + GetSessionFromHash(ctx context.Context, tokenhash string) (*UserSession, error) + GetUserByEmail(ctx context.Context, email string) (*User, error) + GetUserById(ctx context.Context, id int32) (*User, error) + GetUserByUsername(ctx context.Context, username string) (*User, error) + GetUserSessions(ctx context.Context, userid int32) ([]*UserSession, error) + ListAccountShares(ctx context.Context, account int32) ([]int32, error) + ListUserMailAccounts(ctx context.Context, ownerid int32) ([]*MailAccount, error) + ListUserNames(ctx context.Context) ([]string, error) + ListUsers(ctx context.Context, limit int32, offset int32) ([]*User, error) + UpdateSession(ctx context.Context, arg UpdateSessionParams) error + UpdateUser(ctx context.Context, arg UpdateUserParams) error + UpdateUserAdmin(ctx context.Context, arg UpdateUserAdminParams) error +} + +var _ Querier = (*Queries)(nil) diff --git a/database/repository/sessions.sql.go b/database/repository/sessions.sql.go index 809bcc5..b1c224f 100644 --- a/database/repository/sessions.sql.go +++ b/database/repository/sessions.sql.go @@ -23,7 +23,7 @@ type AddSessionParams struct { ExpiresAt time.Time `json:"expiresAt"` } -func (q *Queries) AddSession(ctx context.Context, arg AddSessionParams) (UserSession, error) { +func (q *Queries) AddSession(ctx context.Context, arg AddSessionParams) (*UserSession, error) { row := q.db.QueryRow(ctx, addSession, arg.UserId, arg.TokenHash, @@ -41,7 +41,7 @@ func (q *Queries) AddSession(ctx context.Context, arg AddSessionParams) (UserSes &i.ExpiresAt, &i.CreatedAt, ) - return i, err + return &i, err } const clearUserSessions = `-- name: ClearUserSessions :exec @@ -66,13 +66,8 @@ const deleteSessionById = `-- name: DeleteSessionById :exec DELETE FROM "user_sessions" WHERE "userId" = $1 AND "id" = $2 ` -type DeleteSessionByIdParams struct { - UserId int32 `json:"userId"` - ID int32 `json:"id"` -} - -func (q *Queries) DeleteSessionById(ctx context.Context, arg DeleteSessionByIdParams) error { - _, err := q.db.Exec(ctx, deleteSessionById, arg.UserId, arg.ID) +func (q *Queries) DeleteSessionById(ctx context.Context, userId int32, iD int32) error { + _, err := q.db.Exec(ctx, deleteSessionById, userId, iD) return err } @@ -80,7 +75,7 @@ const getSessionFromHash = `-- name: GetSessionFromHash :one SELECT id, "userId", "tokenHash", "userAgent", "ipAdress", "expiresAt", "createdAt" FROM "user_sessions" WHERE "tokenHash" = $1 ` -func (q *Queries) GetSessionFromHash(ctx context.Context, tokenhash string) (UserSession, error) { +func (q *Queries) GetSessionFromHash(ctx context.Context, tokenhash string) (*UserSession, error) { row := q.db.QueryRow(ctx, getSessionFromHash, tokenhash) var i UserSession err := row.Scan( @@ -92,20 +87,20 @@ func (q *Queries) GetSessionFromHash(ctx context.Context, tokenhash string) (Use &i.ExpiresAt, &i.CreatedAt, ) - return i, err + return &i, err } const getUserSessions = `-- name: GetUserSessions :many SELECT id, "userId", "tokenHash", "userAgent", "ipAdress", "expiresAt", "createdAt" FROM "user_sessions" WHERE "userId" = $1 ORDER BY "id" ASC ` -func (q *Queries) GetUserSessions(ctx context.Context, userid int32) ([]UserSession, error) { +func (q *Queries) GetUserSessions(ctx context.Context, userid int32) ([]*UserSession, error) { rows, err := q.db.Query(ctx, getUserSessions, userid) if err != nil { return nil, err } defer rows.Close() - var items []UserSession + var items []*UserSession for rows.Next() { var i UserSession if err := rows.Scan( @@ -119,7 +114,7 @@ func (q *Queries) GetUserSessions(ctx context.Context, userid int32) ([]UserSess ); err != nil { return nil, err } - items = append(items, i) + items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err diff --git a/database/repository/users.sql.go b/database/repository/users.sql.go index bffaddb..a096cc4 100644 --- a/database/repository/users.sql.go +++ b/database/repository/users.sql.go @@ -22,7 +22,7 @@ type AddUserParams struct { Role string `json:"role"` } -func (q *Queries) AddUser(ctx context.Context, arg AddUserParams) (User, error) { +func (q *Queries) AddUser(ctx context.Context, arg AddUserParams) (*User, error) { row := q.db.QueryRow(ctx, addUser, arg.Username, arg.Name, @@ -40,14 +40,14 @@ func (q *Queries) AddUser(ctx context.Context, arg AddUserParams) (User, error) &i.Role, &i.CreatedAt, ) - return i, err + return &i, err } const getUserByEmail = `-- name: GetUserByEmail :one SELECT id, username, name, image, email, role, "createdAt" FROM "users" WHERE "email" = $1 ` -func (q *Queries) GetUserByEmail(ctx context.Context, email string) (User, error) { +func (q *Queries) GetUserByEmail(ctx context.Context, email string) (*User, error) { row := q.db.QueryRow(ctx, getUserByEmail, email) var i User err := row.Scan( @@ -59,14 +59,14 @@ func (q *Queries) GetUserByEmail(ctx context.Context, email string) (User, error &i.Role, &i.CreatedAt, ) - return i, err + return &i, err } const getUserById = `-- name: GetUserById :one SELECT id, username, name, image, email, role, "createdAt" FROM "users" WHERE "id" = $1 ` -func (q *Queries) GetUserById(ctx context.Context, id int32) (User, error) { +func (q *Queries) GetUserById(ctx context.Context, id int32) (*User, error) { row := q.db.QueryRow(ctx, getUserById, id) var i User err := row.Scan( @@ -78,14 +78,14 @@ func (q *Queries) GetUserById(ctx context.Context, id int32) (User, error) { &i.Role, &i.CreatedAt, ) - return i, err + return &i, err } const getUserByUsername = `-- name: GetUserByUsername :one SELECT id, username, name, image, email, role, "createdAt" FROM "users" WHERE "username" = $1 ` -func (q *Queries) GetUserByUsername(ctx context.Context, username string) (User, error) { +func (q *Queries) GetUserByUsername(ctx context.Context, username string) (*User, error) { row := q.db.QueryRow(ctx, getUserByUsername, username) var i User err := row.Scan( @@ -97,7 +97,7 @@ func (q *Queries) GetUserByUsername(ctx context.Context, username string) (User, &i.Role, &i.CreatedAt, ) - return i, err + return &i, err } const listUserNames = `-- name: ListUserNames :many @@ -128,18 +128,13 @@ const listUsers = `-- name: ListUsers :many SELECT id, username, name, image, email, role, "createdAt" FROM "users" ORDER BY "id" ASC LIMIT $1 OFFSET $2 ` -type ListUsersParams struct { - Limit int32 `json:"limit"` - Offset int32 `json:"offset"` -} - -func (q *Queries) ListUsers(ctx context.Context, arg ListUsersParams) ([]User, error) { - rows, err := q.db.Query(ctx, listUsers, arg.Limit, arg.Offset) +func (q *Queries) ListUsers(ctx context.Context, limit int32, offset int32) ([]*User, error) { + rows, err := q.db.Query(ctx, listUsers, limit, offset) if err != nil { return nil, err } defer rows.Close() - var items []User + var items []*User for rows.Next() { var i User if err := rows.Scan( @@ -153,7 +148,7 @@ func (q *Queries) ListUsers(ctx context.Context, arg ListUsersParams) ([]User, e ); err != nil { return nil, err } - items = append(items, i) + items = append(items, &i) } if err := rows.Err(); err != nil { return nil, err diff --git a/services/auth/auth.go b/services/auth/auth.go index 26708bb..3894cd5 100644 --- a/services/auth/auth.go +++ b/services/auth/auth.go @@ -44,7 +44,7 @@ type AuthService interface { AuthMiddleware(next http.Handler) http.Handler // session management - GetUserSessions(ctx context.Context, userId int32) ([]repository.UserSession, error) + GetUserSessions(ctx context.Context, userId int32) ([]*repository.UserSession, error) DeleteUserSession(ctx context.Context, userId, id int32) error DeleteUserSessions(ctx context.Context, userId int32) error } @@ -225,12 +225,12 @@ func (s *realAuthService) AuthMiddleware(next http.Handler) http.Handler { }) } -func (s *realAuthService) GetUserSessions(ctx context.Context, userId int32) ([]repository.UserSession, error) { +func (s *realAuthService) GetUserSessions(ctx context.Context, userId int32) ([]*repository.UserSession, error) { return database.Queries.GetUserSessions(ctx, userId) } func (s *realAuthService) DeleteUserSession(ctx context.Context, userId, id int32) error { - return database.Queries.DeleteSessionById(ctx, repository.DeleteSessionByIdParams{UserId: userId, ID: id}) + return database.Queries.DeleteSessionById(ctx, userId, id) } func (s *realAuthService) DeleteUserSessions(ctx context.Context, userId int32) error { diff --git a/services/email/accounts.go b/services/email/accounts.go index 2272ea1..4ab4583 100644 --- a/services/email/accounts.go +++ b/services/email/accounts.go @@ -20,11 +20,11 @@ type AccountInfo struct { Shares []string `json:"shares"` } -func (r *realEmailService) GetAccountByEmail(ctx context.Context, email string) (repository.MailAccount, error) { +func (r *realEmailService) GetAccountByEmail(ctx context.Context, email string) (*repository.MailAccount, error) { return database.Queries.GetMailAccountByEmail(ctx, email) } -func (r *realEmailService) ListAccounts(ctx context.Context, userId int32) ([]repository.MailAccount, error) { +func (r *realEmailService) ListAccounts(ctx context.Context, userId int32) ([]*repository.MailAccount, error) { return database.Queries.ListUserMailAccounts(ctx, userId) } @@ -93,8 +93,8 @@ func (r *realEmailService) AddShare(ctx context.Context, params repository.AddSh return database.Queries.AddShare(ctx, params) } -func (r *realEmailService) RemoveShare(ctx context.Context, params repository.DeleteShareParams) error { - return database.Queries.DeleteShare(ctx, params) +func (r *realEmailService) RemoveShare(ctx context.Context, userId, accountId int32) error { + return database.Queries.DeleteShare(ctx, userId, accountId) } func (r *realEmailService) GetAccountShares(ctx context.Context, account int32) ([]int32, error) { diff --git a/services/email/email.go b/services/email/email.go index aad2cbe..c89226f 100644 --- a/services/email/email.go +++ b/services/email/email.go @@ -10,8 +10,8 @@ import ( type EmailService interface { // account stuff - GetAccountByEmail(ctx context.Context, email string) (repository.MailAccount, error) - ListAccounts(ctx context.Context, userId int32) ([]repository.MailAccount, error) + GetAccountByEmail(ctx context.Context, email string) (*repository.MailAccount, error) + ListAccounts(ctx context.Context, userId int32) ([]*repository.MailAccount, error) CountAccounts(ctx context.Context, userId int32) (int64, error) AddAccount(ctx context.Context, params repository.AddEmailAccountParams) (int32, error) RemoveAccount(ctx context.Context, accountId int32) error @@ -19,7 +19,7 @@ type EmailService interface { // sharing AddShare(ctx context.Context, params repository.AddShareParams) error - RemoveShare(ctx context.Context, params repository.DeleteShareParams) error + RemoveShare(ctx context.Context, userId, accountId int32) error GetAccountShares(ctx context.Context, account int32) ([]int32, error) } diff --git a/services/users/users.go b/services/users/users.go index 2e201c6..950cbf1 100644 --- a/services/users/users.go +++ b/services/users/users.go @@ -31,7 +31,7 @@ type UserService interface { DeleteUser(ctx context.Context, user *repository.User) error // other - ListUsers(ctx context.Context, offset, limit int32) ([]repository.User, error) + ListUsers(ctx context.Context, offset, limit int32) ([]*repository.User, error) } type realUserService struct{} @@ -41,18 +41,15 @@ func NewRealUserService() *realUserService { } func (s *realUserService) GetUserById(ctx context.Context, id int32) (*repository.User, error) { - user, err := database.Queries.GetUserById(ctx, id) - return &user, err + return database.Queries.GetUserById(ctx, id) } func (s *realUserService) GetUserByUsername(ctx context.Context, username string) (*repository.User, error) { - user, err := database.Queries.GetUserByUsername(ctx, username) - return &user, err + return database.Queries.GetUserByUsername(ctx, username) } func (s *realUserService) GetUserByEmail(ctx context.Context, email string) (*repository.User, error) { - user, err := database.Queries.GetUserByEmail(ctx, email) - return &user, err + return database.Queries.GetUserByEmail(ctx, email) } func (s *realUserService) GetUserFromContext(ctx context.Context) (*repository.User, error) { @@ -105,8 +102,7 @@ func (s *realUserService) RegisterUser(ctx context.Context, username, email, nam Role: role, } - user, err := database.Queries.AddUser(ctx, params) - return &user, err + return database.Queries.AddUser(ctx, params) } func (s *realUserService) DeleteUser(ctx context.Context, user *repository.User) error { @@ -181,11 +177,11 @@ func (s *realUserService) formatAndValidateUsername(ctx context.Context, usernam return username, nil } -func (s *realUserService) ListUsers(ctx context.Context, offset, limit int32) ([]repository.User, error) { +func (s *realUserService) ListUsers(ctx context.Context, offset, limit int32) ([]*repository.User, error) { if limit > 200 { limit = 200 } - return database.Queries.ListUsers(ctx, repository.ListUsersParams{Offset: offset, Limit: limit}) + return database.Queries.ListUsers(ctx, offset, limit) } func (s *realUserService) GetUsernameBlacklist() []string { diff --git a/sqlc.yml b/sqlc.yml index 816e535..683fe09 100644 --- a/sqlc.yml +++ b/sqlc.yml @@ -9,6 +9,10 @@ sql: out: "database/repository" sql_package: "pgx/v5" emit_json_tags: true + emit_interface: true + emit_result_struct_pointers: true + emit_pointers_for_null_types: true + query_parameter_limit: 2 overrides: - db_type: "timestamptz" go_type: