# Utilities
- `removeNote(noteId: number): Result<void, NoteError>`
  - This will remove the note with the given NoteId

# Users
- `login(LoginInput): Result<User, LoginError>`
  - This function is used to log in a user with the backend
- `logout(): Result<void, LogoutError>`
  - This function is used to log out the current user
- `currentUser(): Result<UserInfo, CurrentUserError>`
  - This function asks the backend what our currently logged in user is

## User Specific
- `user.getAll(): Promise<Result<UserInfo[], UserError>>`
  - Get all users registered on the server
- `user.modifySeniority(SeniorityInfo): Promise<Result<SeniorityInfo, UserError>>`
  - Alter the Seniority information
- `user.create(UserInput): Promise<Result<UserInfo, UserError>>`
  - Crate a new user
- `user.get(userId: number): Promise<Result<UserInfo, UserError>>`
  - Get all user information based on the given UserId
- `user.modify(UserInfo): Promise<Result<UserInfo, UserError>>`
  - Alter the given user to have the new information
  - What this function can edit depends on the currently logged in user
- `user.remove(UserInfo): Promise<Result<void, UserError>>`
  - Remove the given user
- `user.getAllNotes(UserInfo): Promise<Result<Note[], NoteError>>`
  - Get all notes related to the given user
- `user.addNote(UserInfo, note: string): Promise<Result<Note, NoteError>>`
  - Add a new note with the given content to the given user

# Positions
- `position.getAll(): Promise<Result<Position[], PositionError>>`
  - Get all Positions
- `position.create(PositionDetails): Promise<Result<Position, PositionError>>`
  - Create a new Position
- `position.modify(Position): Promise<Result<Position, PositionError>>`
  - Modify the given position on the server
- `position.remove(Position): Promise<Result<void, PositionError>>`
  - Remove the given position from the server

# Skills
- `skill.getAll(): Promise<Result<Skill[], SkillError>>`
  - Get all Skills
- `skill.create(SkillDetails): Promise<Result<Skill, SkillError>>`
  - Create a new Skill
- `skill.modify(Skill): Promise<Result<Skill, SkillError>>`
  - Modify the given skill on the server
- `skill.remove(Skill): Promise<Result<void, SkillError>>`
  - Remove the given skill from the server

# Shift
- `shift.getAll(): Promise<Result<Shift[], ShiftError>>`
  - Get all Shifts
- `shift.create(ShiftDetails): Promise<Result<Shift, ShiftError>>`
  - Create a new Shift
- `shift.modify(Shift): Promise<Result<Shift, ShiftError>>`
  - Modify the given shift on the server
- `shift.remove(Shift): Promise<Result<void, ShiftError>>`
  - Remove the given shift from the server

# Schedules
- `schedule.getAll(): Promise<Result<Schedule[], ScheduleError>>`
  - Get all Schedules
- `schedule.create(ScheduleInput): Promise<Result<Schedule, ScheduleError>>`
  - Create a new Schedule
- `schedule.copy(sourceId: number, ScheduleInput): Promise<Result<Schedule, ScheduleError>>`
  - Create a new Schedule, as a clone of the one with the given ScheduleId
- `schedule.get(scheduleId: number): Promise<Result<Schedule, ScheduleError>>`
  - Get all schedule information based on the given ScheduleId
- `schedule.modify(Schedule): Promise<Result<Schedule, ScheduleError>>`
  - Modify the given schedule
- `schedule.remove(Schedule): Promise<Result<void, ScheduleError>>`
  - Remvoe the given schedule
- `schedule.getAllNotes(Schedule): Promise<Result<Note[], NoteError>>`
  - Get all notes related to the given schedule
- `schedule.addNote(Schedule, note: string): Promise<Result<Note, NoteError>>`
  - Add a new note with the given content to the given schedule

## Time Slots
- `timeslot.getAll(): Promise<Result<TimeSlot[], TimeSlotError>>`
  - Get all Time Slots in a given Schedule
- `timeslot.create(TimeSlotInput): Promise<Result<TimeSlot, TimeSlotError>>`
  - Create a new Time Slots in the given Schedule
- `timeslot.get(timeslotId: number): Promise<Result<TimeSlot, TimeSlotError>>`
  - Get all Timeslot Details for the Time Slot with the given TimeSlotId
- `timeslot.temporirilyEdit(TimeSlotEdit): Promise<Result<TimeSlotsEdited, TimeSlotError>>`
  - Edit the timeslot given by the TimeSlotEdit.id to have different properties
  - This does not just replace the timeslot directly, for that behavior use `modify`.
  - The timeslot end and start data should not be the same as the ones in the time slot given by the TimeSlotId
- `timeslot.modify(TimeSlot): Promise<Result<TimeSlot, TimeSlotError>>`
  - Modify the given time slot
- `timeslot.remove(TimeSlot): Promise<Result<void, TimeSlotError>>`
  - Remove the given time slot
- `timeslot.getAllNotes(TimeSlot): Promise<Result<Note[], NoteError>>`
  - Get all notes related to the given time slot
- `timeslot.addNote(TimeSlot, note: string): Promise<Result<Note, NoteError>>`
  - Add a new note with the given content to the given time slot
