···5858 GetRoleRow(user_role: UserRoleEnum)
5959}
60606161-/// Runs the `get_role` query
6262-/// defined in `./src/server/auth/sql/get_role.sql`.
6161+/// ๎ท Find role assigned to an determined user
6362///
6463/// > ๐ฟ๏ธ This function was generated automatically using v4.6.0 of
6564/// > the [squirrel package](https://github.com/giacomocavalieri/squirrel).
···7372 decode.success(GetRoleRow(user_role:))
7473 }
75747676- "select u.user_role from public.user_account as u
7575+ "-- ๎ท Find role assigned to an determined user
7676+select u.user_role
7777+from public.user_account as u
7778where u.id = $1;
7879"
7980 |> pog.query
+41-22
server/src/server/crew.gleam
···22import gleam/result
33import pog
44import server/crew/sql
55-import server/user as server_user
55+import server/user
66import shared/crew.{type Crew, Crew}
77-import shared/user.{type User, User}
77+import shared/user.{type User, User} as _shared_user
8899pub type CrewError {
1010 Database(pog.QueryError)
1111- UserError(server_user.UserError)
1111+ UserError(user.UserError)
1212+1313+ /// Crew name needs to be unique
1414+ NameConflict
1515+ /// Crew not found
1216 NotFound
1317}
14181919+/// Register an new empty crew
1520pub fn register(
1621 db db: pog.Connection,
1722 leader leader: User,
···1924 is_active is_active: Bool,
2025) -> Result(Crew, CrewError) {
2126 use returned <- result.try(
2222- sql.register(db, leader.uuid, crew_name, is_active)
2323- |> result.map_error(Database),
2727+ case sql.register(db, leader.uuid, crew_name, is_active) {
2828+ // Crew name needs to be unique
2929+ Error(pog.ConstraintViolated(constraint: "crew_name_key", ..)) ->
3030+ Error(NameConflict)
3131+3232+ // Other errors
3333+ Error(err) -> Error(Database(err))
3434+ Ok(rows) -> Ok(rows)
3535+ },
2436 )
25372638 use row <- result.try(
···2840 |> result.replace_error(NotFound),
2941 )
30423131- use leader <- result.map(
3232- server_user.find(db, row.crew_leader)
4343+ use leader: User <- result.map(
4444+ user.find(db, row.crew_leader)
3345 |> result.map_error(UserError),
3446 )
3547···4153 )
4254}
43555656+/// Assign a group of members to a crew.
5757+/// Nothing happens is a member is already assigned.
5858+///
5959+/// Returns all successfully assigned members.
4460pub fn assign(
4561 db: pog.Connection,
4662 crew: Crew,
4763 members: List(User),
4864) -> Result(List(User), CrewError) {
4949- let id_list = list.map(members, fn(member) { member.uuid })
6565+ let id_list = {
6666+ use member <- list.map(members)
6767+ member.uuid
6868+ }
50695170 use returned <- result.try(
5271 sql.assign_members(db, crew.id, id_list)
5372 |> result.map_error(Database),
5473 )
55745656- use row <- list.try_map(returned.rows)
7575+ list.try_map(returned.rows, fn(row) {
7676+ use user <- result.map(
7777+ user.find(db, row.user_id)
7878+ |> result.map_error(UserError),
7979+ )
57805858- use member <- result.map(
5959- server_user.find(db, row.user_id)
6060- |> result.map_error(UserError),
6161- )
6262-6363- User(
6464- uuid: member.uuid,
6565- role: member.role,
6666- full_name: member.full_name,
6767- email: member.email,
6868- phone: member.phone,
6969- is_active: member.is_active,
7070- )
8181+ User(
8282+ uuid: user.uuid,
8383+ role: user.role,
8484+ full_name: user.full_name,
8585+ email: user.email,
8686+ phone: user.phone,
8787+ is_active: user.is_active,
8888+ )
8989+ })
7190}
+12-12
server/src/server/crew/sql.gleam
···1818 AssignMembersRow(user_id: Uuid)
1919}
20202121-/// Runs the `assign_members` query
2222-/// defined in `./src/server/crew/sql/assign_members.sql`.
2121+/// ๏ Assign a group of members to a crew
2322///
2423/// > ๐ฟ๏ธ This function was generated automatically using v4.6.0 of
2524/// > the [squirrel package](https://github.com/giacomocavalieri/squirrel).
···3433 decode.success(AssignMembersRow(user_id:))
3534 }
36353737- "insert into crew_membership as cm (
3636+ "-- ๏ Assign a group of members to a crew
3737+insert into crew_membership as cm (
3838 crew_id,
3939 user_id
4040)
4141-4241values ($1, unnest($2::uuid []))
4242+4343on conflict do nothing
4444returning cm.user_id;
4545"
···6868 )
6969}
70707171-/// Runs the `find_members` query
7272-/// defined in `./src/server/crew/sql/find_members.sql`.
7171+/// ๏ Find all members assigned to a determined crew
7372///
7473/// > ๐ฟ๏ธ This function was generated automatically using v4.6.0 of
7574/// > the [squirrel package](https://github.com/giacomocavalieri/squirrel).
···8786 decode.success(FindMembersRow(id:, role:, full_name:, email:, phone:))
8887 }
89889090- "with member as (
8989+ "-- ๏ Find all members assigned to a determined crew
9090+with member as (
9191 select cm.user_id as id
9292 from crew_membership as cm
9393 where cm.crew_id = $1
···118118 RegisterRow(id: Uuid, crew_leader: Uuid, crew_name: String, is_active: Bool)
119119}
120120121121-/// Runs the `register` query
122122-/// defined in `./src/server/crew/sql/register.sql`.
121121+/// ๏ Register an new empty crew
123122///
124123/// > ๐ฟ๏ธ This function was generated automatically using v4.6.0 of
125124/// > the [squirrel package](https://github.com/giacomocavalieri/squirrel).
···138137 decode.success(RegisterRow(id:, crew_leader:, crew_name:, is_active:))
139138 }
140139141141- "insert into crew as c (
140140+ "-- ๏ Register an new empty crew
141141+insert into crew as c (
142142 crew_leader,
143143 crew_name,
144144 is_active
145145-) values ($1, $2, $3)
146146-145145+)
146146+values ($1, $2, $3)
147147returning c.id, c.crew_leader, c.crew_name, c.is_active;
148148"
149149 |> pog.query
+1-1
server/src/server/crew/sql/assign_members.sql
···11--- ๏ Assign a group of members to a crew
11+-- ๏ Assign a group of members to a crew
22insert into crew_membership as cm (
33 crew_id,
44 user_id
+2-1
server/src/server/seed/sql.gleam
···33333434 "-- ๓ฐถ Check if the user_account table is empty
3535-- If it returns a least one row it means that the tables is not empty.
3636-select 1 as row_exists from public.user_account;
3636+select 1 as row_exists
3737+from public.user_account;
3738"
3839 |> pog.query
3940 |> pog.returning(decoder)
+13-7
server/src/server/user/sql.gleam
···2525 )
2626}
27272828-/// Runs the `find` query
2929-/// defined in `./src/server/user/sql/find.sql`.
2828+/// ๏ Find details about an user
3029///
3130/// > ๐ฟ๏ธ This function was generated automatically using v4.6.0 of
3231/// > the [squirrel package](https://github.com/giacomocavalieri/squirrel).
···4544 decode.success(FindRow(id:, role:, full_name:, email:, phone:, is_active:))
4645 }
47464848- "select
4747+ "-- ๏ Find details about an user
4848+select
4949 u.id,
5050 u.user_role as role,
5151 u.full_name,
···7878 )
7979}
80808181-/// ๏ด register an user
8181+/// ๏ด Register an user
8282///
8383/// > ๐ฟ๏ธ This function was generated automatically using v4.6.0 of
8484/// > the [squirrel package](https://github.com/giacomocavalieri/squirrel).
···109109 ))
110110 }
111111112112- "-- ๏ด register an user
113113-insert into public.user_account as u
114114-(full_name, user_role, password_hash, email, phone, is_active)
112112+ "-- ๏ด Register an user
113113+insert into public.user_account as u (
114114+ full_name,
115115+ user_role,
116116+ password_hash,
117117+ email,
118118+ phone,
119119+ is_active
120120+)
115121values ($1, $2, $3, $4, $5, $6)
116122returning u.id, u.full_name, u.user_role, u.email, u.phone, u.is_active;
117123"