From fa9efa6318776a13a47cca13abcf9532a93410c9 Mon Sep 17 00:00:00 2001
From: Kaholaz <vkbugge@hotmail.com>
Date: Tue, 18 Apr 2023 16:42:11 +0200
Subject: [PATCH 1/6] docs: unfinished swagger documentation

---
 docs/swagger.yaml | 482 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 482 insertions(+)
 create mode 100644 docs/swagger.yaml

diff --git a/docs/swagger.yaml b/docs/swagger.yaml
new file mode 100644
index 0000000..d4582d5
--- /dev/null
+++ b/docs/swagger.yaml
@@ -0,0 +1,482 @@
+openapi: 3.0.3
+info:
+  title: let API - OpenAPI 3.0
+  description: |-
+    A simple API for listing items for sale. 
+    Some useful links:
+    - [The GitHub repository](https://github.com/BeatsuDev/let) 
+  termsOfService: http://swagger.io/terms/
+  contact:
+    email: vkbugge@hotmail.com
+  license:
+    name: MIT License
+    url: 'https://opensource.org/licenses/MIT'
+  version: 1.0.0
+servers:
+  - url: https://localhost:8080/
+  - url: https://api.let.no/
+tags:
+  - name: account
+    description: Operations about account
+  - name: household
+    description: Operations about household
+  - name: inventory
+    description: Operations about inventory
+  - name: shopping list
+    description: Operations about shopping list
+paths:
+  /user:
+    post:
+      tags:
+        - account
+      summary: Create a user
+      description: Creates a user
+      operationId: createUser
+      requestBody:
+        description: The user to be created
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CreateUser'
+      responses:
+        '201':
+          description: successful operation
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserFull'
+        '409':
+          description: User already exists
+    put:
+      tags:
+        - account
+      summary: Update user
+      description: Updates a user
+      operationId: updateUser
+      requestBody:
+        description: The user to be updated
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UpdateUser'
+      responses:
+        '200':
+          description: successful operation
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserFull'
+        '404':
+          description: User not found
+  /user/{id}:
+    get:
+      tags:
+        - account
+      summary: Get user by id
+      description: Returns a single user
+      operationId: getUserById
+      parameters:
+        - name: id
+          in: path
+          description: ID of user to return
+          required: true
+          schema:
+            type: integer
+            format: int64
+      responses:
+        '200':
+          description: successful operation
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserFull'
+        '404':
+          description: User not found
+    delete:
+      tags:
+        - account
+      summary: Delete user
+      description: Deletes a user
+      operationId: deleteUser
+      parameters:
+        - name: id
+          in: path
+          description: ID of user to delete
+          required: true
+          schema:
+            type: integer
+            format: int64
+      responses:
+        '204':
+          description: successful operation
+        '401':
+          description: Access denied
+        '404':
+          description: User not found
+  /user/login:
+    post:
+      tags:
+        - account
+      summary: Login user
+      description: Logs in a user
+      operationId: loginUser
+      requestBody:
+        description: The user to be logged in
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LoginUser'
+      responses:
+        '200':
+          description: successful operation
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserFull'
+        '401':
+          description: User could not be logged in
+  /user/logout:
+    post:
+      tags:
+        - account
+      summary: Logout user
+      description: Logs out a user
+      operationId: logoutUser
+      responses:
+        '200':
+          description: successful operation
+        '401':
+          description: User could not be logged out
+  /household/{id}/users:
+    put:
+      tags:
+        - household
+      summary: Update user type
+      description: Updates the type of a user in the household. Can only be done by a superuser
+      operationId: updateUserType
+      requestBody:
+        description: Updated the type of user in the household
+        content:
+          application/json:
+            schema:
+              type: object
+              properties:
+                userId:
+                  type: integer
+                  format: int64
+                userType:
+                  type: string
+                  enum:
+                    - SUPERUSER
+                    - USER
+      responses:
+        '200':
+          description: successful operation
+        '401':
+          description: Access denied
+    post:
+      tags:
+        - household
+      summary: Add user
+      description: Adds a user to the household. Can only be done by a superuser
+      operationId: addUser
+      parameters:
+        - name: id
+          in: path
+          description: ID of household to add a user to
+          required: true
+          schema:
+            type: integer
+            format: int64
+      requestBody:
+        description: Added user to household
+        content:
+          application/json:
+            schema:
+              type: object
+              properties:
+                userId:
+                  type: integer
+                  format: int64
+      responses:
+        '201':
+          description: successful operation
+        '409':
+          description: User already exists in the household
+        '401':
+          description: Access denied
+    delete:
+      tags:
+        - household
+      summary: Delete user
+      description: Deletes a user from the household. Can only be done by a superuser
+      operationId: deleteUser
+      parameters:
+        - name: id
+          in: path
+          description: ID of household to delete a user from
+          required: true
+          schema:
+            type: integer
+            format: int64
+      requestBody:
+        description: Deleted user from household
+        content:
+          application/json:
+            schema:
+              type: integer
+              format: int64
+      responses:
+        '204':
+          description: successful operation
+        '404':
+          description: User not found in the household
+        '401':
+          description: Access denied
+  /household/{id}:
+    put:
+      tags:
+          - household
+      summary: Update household name
+      description: Updates the name of a household. Can only be done by a superuser
+      operationId: updateName
+      parameters:
+        - name: id
+          in: path
+          description: ID of household to update
+          required: true
+          schema:
+            type: integer
+            format: int64
+      requestBody:
+         description: Updated the household name
+         content:
+          application/json:
+            schema:
+              type: integer
+              format: int64
+      responses:
+          '200':
+            description: successful operation
+          '401':
+            description: Access denied
+
+  /household/{id}/shoppinglist:
+    get:
+      tags:
+       - shopping list
+      summary: Get the shopping list of a household
+      description: Gets a shopping list with item id from shopping list
+      operationId: getShoppingList
+      parameters:
+        - name: id
+          in: path
+          description: ID of household's shopping list to get items from
+          required: true
+          schema:
+            type: integer
+            format: int64
+      responses:
+        '201':
+          description: item found
+        '401':
+          description: Unauthorized
+    post: 
+      tags:
+        - shopping list
+      summary: Add item to shopping list
+      description: Adds a selected item to shopping list, user has to be validated
+      parameters:
+        - name: id
+          in: path
+          description: ID of household's shopping list to add items to
+          required: true
+          schema:
+            type: integer
+            format: int64
+      operationId: addItem
+      requestBody:
+        description: Item to be added to shopping list
+        content:
+          application/json:
+            schema:
+              type: object
+              properties:
+                itemTypeId:
+                  type: integer
+                  format: int64
+      responses:
+        '201':
+          description: Successful operation
+        '401':
+          description: Unauthorized response
+    delete:
+      tags:
+        - shopping list
+      summary: Delete item from shopping list
+      description: Deletes a list of items passed in the request body
+      operationId: deleteItem
+      parameters:
+        - name: id
+          in: path
+          description: ID of item to delete
+          required: true
+          schema:
+            type: integer
+            format: int64
+      responses:
+        '201':
+          description: item deleted successfully
+        '401':
+          description: Unauthorized response, user is not validated or does not have access
+  
+  /inventory:
+    post:
+      tags:
+        - inventory
+      summary: Add item to inventory
+      description: Adds a selected item to inventory
+      operationId: addInventoryItem
+      requestBody:
+        description: Item to be added to inventory
+        content:
+          application/json:
+            schema:
+              type: object
+              properties:
+                itemId:
+                  type: integer
+                  format: int64
+      responses:
+        
+  /item:
+    put:
+      tags:
+        - item
+        - inventory
+        - shopping list
+      summary: Update item state
+      requestBody:
+        content:
+          application/json:
+            schema:
+              type: object
+              required:
+                - itemId
+                - state
+              properties:
+                itemId:
+                  type: integer
+                  format: int64
+                state:
+                  $ref: '#/components/schemas/ItemState'
+                remaining:
+                  type: number
+                  format: int64
+      responses:
+        200:
+          description: Item updated successfully
+        400:
+          description: Bad request
+        404:
+          description: Item not found
+  /item/{id}:
+  
+components:
+  schemas:
+    CreateUser:
+      type: object
+      properties:
+        email:
+          type: string
+          format: email
+          example: jens@gmail.com
+        password:
+          type: string
+          format: password
+          example: password123
+        firstName:
+          type: string
+          example: John
+    LoginUser:
+      type: object
+      properties:
+        email:
+          type: string
+          format: email
+          example: lennon@gmail.com
+        password:
+          type: string
+          format: password
+          example: hunter2
+    UpdateUser:
+      type: object
+      properties:
+        id:
+          type: integer
+          format: int64
+          example: 10
+        email:
+          type: string
+          format: email
+          example: jens@gmail.com
+        password:
+          type: string
+          format: password
+          example: password123
+        firstName:
+          type: string
+          example: John
+    UserFull:
+      type: object
+      properties:
+        id:
+          type: integer
+          format: int64
+          example: 10
+        email:
+          type: string
+          format: email
+          example: example@example.org
+        firstName:
+          type: string
+          example: John
+        lastName:
+          type: string
+          example: James
+    ItemState:
+      type: string
+      enum:
+        - WASTED
+        - CONSUMED
+        - SHOPPINGLIST
+        - INVENTORY
+    ItemType:
+      type: object
+      properties:
+        id:
+          type: integer
+          example: 123
+        name:
+          type: string
+          example: "Milk"
+    ShoppingItem:
+      type: object
+      properties:
+        id:
+          type: integer
+          example: 123
+        type:
+          $ref: '#/components/schemas/ItemType'
+    InventoryItem:
+      type: object
+      properties:
+        id:
+          type: integer
+          example: 123
+        bought:
+          type: string
+          format: date
+          example: "2021-04-18"
+        type:
+          $ref: '#/components/schemas/ItemType'
\ No newline at end of file
-- 
GitLab


From df24dd0be7018660909278e9144bcaaf65a208da Mon Sep 17 00:00:00 2001
From: Kaholaz <vkbugge@hotmail.com>
Date: Wed, 19 Apr 2023 09:09:22 +0200
Subject: [PATCH 2/6] docs: add docker run scripts

---
 docs/run_swagger.bat | 3 +++
 docs/run_swagger.sh  | 5 +++++
 2 files changed, 8 insertions(+)
 create mode 100644 docs/run_swagger.bat
 create mode 100755 docs/run_swagger.sh

diff --git a/docs/run_swagger.bat b/docs/run_swagger.bat
new file mode 100644
index 0000000..e8466f8
--- /dev/null
+++ b/docs/run_swagger.bat
@@ -0,0 +1,3 @@
+echo 'Starting swagger on http://localhost:3000'
+docker pull swaggerapi/swagger-ui
+docker run -p 3000:8080 -e SWAGGER_JSON=/api.yaml -v %cd%/swagger.yaml:/api.yaml swaggerapi/swagger-ui
diff --git a/docs/run_swagger.sh b/docs/run_swagger.sh
new file mode 100755
index 0000000..f47b287
--- /dev/null
+++ b/docs/run_swagger.sh
@@ -0,0 +1,5 @@
+#!/bin/bash
+
+echo 'Starting swagger on http://localhost:3000'
+docker pull swaggerapi/swagger-ui
+docker run -p 3000:8080 -e SWAGGER_JSON=/api.yaml -v $(pwd)/swagger.yaml:/api.yaml swaggerapi/swagger-ui
-- 
GitLab


From 991796c2dd8a3eba77ef4c09c7a7c90ff4eb4a86 Mon Sep 17 00:00:00 2001
From: Mats Lading <mjlading@stud.ntnu.no>
Date: Fri, 28 Apr 2023 11:41:21 +0200
Subject: [PATCH 3/6] chore: merge dev into docs/swagger local

---
 api/.idea/.gitignore                          |   8 +
 api/.idea/compiler.xml                        |  30 +
 api/.idea/encodings.xml                       |   6 +
 api/.idea/jarRepositories.xml                 |  20 +
 api/.idea/jpa-buddy.xml                       |   7 +
 api/.idea/misc.xml                            |  15 +
 api/.idea/uiDesigner.xml                      | 124 +++
 api/.idea/vcs.xml                             |   6 +
 api/api.iml                                   | 144 +++
 api/database/localdb.mv.db                    | Bin 0 -> 65536 bytes
 api/database/localdb.trace.db                 | 163 +++
 api/target/classes/application-dev.properties |  12 +
 api/target/classes/application.properties     |   1 +
 api/target/classes/insert_item_types.sql      | 998 ++++++++++++++++++
 .../freshify/api/FreshifyApiApplication.class | Bin 0 -> 752 bytes
 .../freshify/api/GlobalExceptionHandler.class | Bin 0 -> 8260 bytes
 .../api/controller/HouseholdController.class  | Bin 0 -> 6830 bytes
 .../HouseholdMemberController.class           | Bin 0 -> 7440 bytes
 .../api/controller/InventoryController.class  | Bin 0 -> 10349 bytes
 .../api/controller/ItemTypeController.class   | Bin 0 -> 2490 bytes
 .../controller/ShoppingListController.class   | Bin 0 -> 9272 bytes
 .../api/controller/UserController.class       | Bin 0 -> 11683 bytes
 ...ouseholdMemberAlreadyExistsException.class | Bin 0 -> 623 bytes
 .../HouseholdNotFoundException.class          | Bin 0 -> 579 bytes
 .../IllegalItemParameterException.class       | Bin 0 -> 629 bytes
 .../IllegalItemStatusException.class          | Bin 0 -> 581 bytes
 .../InvalidHouseholdMemberRoleException.class | Bin 0 -> 618 bytes
 .../exception/InvalidItemCountException.class | Bin 0 -> 615 bytes
 ...temDoesNotBelongToHouseholdException.class | Bin 0 -> 628 bytes
 .../api/exception/ItemNotFoundException.class | Bin 0 -> 559 bytes
 .../exception/ItemTypeNotFoundException.class | Bin 0 -> 576 bytes
 .../ItemTypesNotFoundException.class          | Bin 0 -> 591 bytes
 ...ppingListEntryAlreadyExistsException.class | Bin 0 -> 649 bytes
 .../ShoppingListEntryNotFoundException.class  | Bin 0 -> 654 bytes
 ...serDoesNotBelongToHouseholdException.class | Bin 0 -> 628 bytes
 .../api/exception/UserNotFoundException.class | Bin 0 -> 559 bytes
 .../no/freshify/api/model/Household.class     | Bin 0 -> 3140 bytes
 .../freshify/api/model/HouseholdMember.class  | Bin 0 -> 2326 bytes
 .../api/model/HouseholdMemberKey.class        | Bin 0 -> 1153 bytes
 .../api/model/HouseholdMemberRole.class       | Bin 0 -> 1209 bytes
 .../classes/no/freshify/api/model/Item.class  | Bin 0 -> 4081 bytes
 .../no/freshify/api/model/ItemStatus.class    | Bin 0 -> 1146 bytes
 .../no/freshify/api/model/ItemType.class      | Bin 0 -> 1078 bytes
 .../api/model/ShoppingListEntry.class         | Bin 0 -> 2654 bytes
 .../classes/no/freshify/api/model/User.class  | Bin 0 -> 3154 bytes
 .../api/model/dto/CreateHousehold.class       | Bin 0 -> 598 bytes
 .../freshify/api/model/dto/CreateUser.class   | Bin 0 -> 991 bytes
 .../freshify/api/model/dto/HouseholdDTO.class | Bin 0 -> 834 bytes
 .../api/model/dto/HouseholdMemberDTO.class    | Bin 0 -> 1328 bytes
 .../api/model/dto/InventoryItem.class         | Bin 0 -> 2672 bytes
 .../freshify/api/model/dto/ItemTypeDTO.class  | Bin 0 -> 831 bytes
 .../no/freshify/api/model/dto/LoginUser.class | Bin 0 -> 784 bytes
 .../dto/ShoppingListEntryEditRequest.class    | Bin 0 -> 1290 bytes
 .../model/dto/ShoppingListEntryRequest.class  | Bin 0 -> 1104 bytes
 .../model/dto/ShoppingListEntryResponse.class | Bin 0 -> 2229 bytes
 .../api/model/dto/UpdateInventoryItem.class   | Bin 0 -> 1094 bytes
 .../freshify/api/model/dto/UpdateUser.class   | Bin 0 -> 1457 bytes
 .../no/freshify/api/model/dto/UserFull.class  | Bin 0 -> 1212 bytes
 .../no/freshify/api/model/dto/UserId.class    | Bin 0 -> 331 bytes
 .../api/model/dto/UserTypeRequest.class       | Bin 0 -> 855 bytes
 .../api/model/mapper/HouseholdMapper.class    | Bin 0 -> 730 bytes
 .../model/mapper/HouseholdMapperImpl.class    | Bin 0 -> 1860 bytes
 .../model/mapper/HouseholdMemberMapper.class  | Bin 0 -> 954 bytes
 .../mapper/HouseholdMemberMapperImpl.class    | Bin 0 -> 2850 bytes
 .../api/model/mapper/ItemMapper.class         | Bin 0 -> 1421 bytes
 .../api/model/mapper/ItemMapperImpl.class     | Bin 0 -> 4510 bytes
 .../mapper/ShoppingListEntryMapper.class      | Bin 0 -> 1394 bytes
 .../mapper/ShoppingListEntryMapperImpl.class  | Bin 0 -> 4093 bytes
 .../api/model/mapper/UserMapper.class         | Bin 0 -> 1565 bytes
 .../api/model/mapper/UserMapperImpl.class     | Bin 0 -> 2184 bytes
 .../HouseholdMemberRepository.class           | Bin 0 -> 1354 bytes
 .../api/repository/HouseholdRepository.class  | Bin 0 -> 480 bytes
 .../api/repository/ItemRepository.class       | Bin 0 -> 1036 bytes
 .../api/repository/ItemTypeRepository.class   | Bin 0 -> 788 bytes
 .../ShoppingListEntryRepository.class         | Bin 0 -> 545 bytes
 .../api/repository/UserRepository.class       | Bin 0 -> 523 bytes
 .../api/security/AuthenticationService.class  | Bin 0 -> 8766 bytes
 .../freshify/api/security/CookieFactory.class | Bin 0 -> 1318 bytes
 .../api/security/JwtTokenFilter.class         | Bin 0 -> 4177 bytes
 .../api/security/JwtUserDetailsService.class  | Bin 0 -> 1791 bytes
 .../security/PermissionEvaluatorImpl.class    | Bin 0 -> 3374 bytes
 .../api/security/UserAuthentication.class     | Bin 0 -> 1523 bytes
 .../api/security/UserDetailsImpl.class        | Bin 0 -> 4233 bytes
 .../security/WebSecurityConfiguration$1.class | Bin 0 -> 1960 bytes
 .../security/WebSecurityConfiguration.class   | Bin 0 -> 7885 bytes
 .../api/service/HouseholdMemberService.class  | Bin 0 -> 4455 bytes
 .../api/service/HouseholdService.class        | Bin 0 -> 5145 bytes
 .../no/freshify/api/service/ItemService.class | Bin 0 -> 3031 bytes
 .../api/service/ItemTypeService.class         | Bin 0 -> 2297 bytes
 .../service/ShoppingListEntryService.class    | Bin 0 -> 9166 bytes
 .../no/freshify/api/service/UserService.class | Bin 0 -> 2196 bytes
 .../api/model/mapper/HouseholdMapperImpl.java |  43 +
 .../mapper/HouseholdMemberMapperImpl.java     |  60 ++
 .../api/model/mapper/ItemMapperImpl.java      |  99 ++
 .../mapper/ShoppingListEntryMapperImpl.java   |  96 ++
 .../api/model/mapper/UserMapperImpl.java      |  75 ++
 .../compile/default-compile/inputFiles.lst    |  67 ++
 .../test-classes/application-test.properties  |   8 +
 .../api/FreshifyAPIApplicationTests.class     | Bin 0 -> 629 bytes
 .../controller/HouseholdControllerTest.class  | Bin 0 -> 9866 bytes
 .../HouseholdMemberControllerTest.class       | Bin 0 -> 10804 bytes
 .../controller/InventoryControllerTest.class  | Bin 0 -> 10791 bytes
 .../controller/ItemTypeControllerTest.class   | Bin 0 -> 5016 bytes
 .../ShoppingListControllerTest.class          | Bin 0 -> 12848 bytes
 .../api/controller/UserControllerTest.class   | Bin 0 -> 12545 bytes
 .../security/TestAuthenticationService.class  | Bin 0 -> 7437 bytes
 .../api/security/TestCookieFactory.class      | Bin 0 -> 1183 bytes
 .../security/TestPermissionEvaluator.class    | Bin 0 -> 3121 bytes
 .../service/HouseholdMemberServiceTest.class  | Bin 0 -> 6011 bytes
 .../api/service/HouseholdServiceTest.class    | Bin 0 -> 9526 bytes
 .../api/service/ItemServiceTest.class         | Bin 0 -> 5687 bytes
 .../api/service/ItemTypeServiceTest.class     | Bin 0 -> 4215 bytes
 .../ShoppingListEntryServiceTest.class        | Bin 0 -> 9544 bytes
 .../api/service/UserServiceTest.class         | Bin 0 -> 4596 bytes
 docs/swagger.yaml                             |  42 +
 115 files changed, 2024 insertions(+)
 create mode 100644 api/.idea/.gitignore
 create mode 100644 api/.idea/compiler.xml
 create mode 100644 api/.idea/encodings.xml
 create mode 100644 api/.idea/jarRepositories.xml
 create mode 100644 api/.idea/jpa-buddy.xml
 create mode 100644 api/.idea/misc.xml
 create mode 100644 api/.idea/uiDesigner.xml
 create mode 100644 api/.idea/vcs.xml
 create mode 100644 api/api.iml
 create mode 100644 api/database/localdb.mv.db
 create mode 100644 api/database/localdb.trace.db
 create mode 100644 api/target/classes/application-dev.properties
 create mode 100644 api/target/classes/application.properties
 create mode 100644 api/target/classes/insert_item_types.sql
 create mode 100644 api/target/classes/no/freshify/api/FreshifyApiApplication.class
 create mode 100644 api/target/classes/no/freshify/api/GlobalExceptionHandler.class
 create mode 100644 api/target/classes/no/freshify/api/controller/HouseholdController.class
 create mode 100644 api/target/classes/no/freshify/api/controller/HouseholdMemberController.class
 create mode 100644 api/target/classes/no/freshify/api/controller/InventoryController.class
 create mode 100644 api/target/classes/no/freshify/api/controller/ItemTypeController.class
 create mode 100644 api/target/classes/no/freshify/api/controller/ShoppingListController.class
 create mode 100644 api/target/classes/no/freshify/api/controller/UserController.class
 create mode 100644 api/target/classes/no/freshify/api/exception/HouseholdMemberAlreadyExistsException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/HouseholdNotFoundException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/IllegalItemParameterException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/IllegalItemStatusException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/InvalidHouseholdMemberRoleException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/InvalidItemCountException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/ItemDoesNotBelongToHouseholdException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/ItemNotFoundException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/ItemTypeNotFoundException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/ItemTypesNotFoundException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/ShoppingListEntryAlreadyExistsException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/ShoppingListEntryNotFoundException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/UserDoesNotBelongToHouseholdException.class
 create mode 100644 api/target/classes/no/freshify/api/exception/UserNotFoundException.class
 create mode 100644 api/target/classes/no/freshify/api/model/Household.class
 create mode 100644 api/target/classes/no/freshify/api/model/HouseholdMember.class
 create mode 100644 api/target/classes/no/freshify/api/model/HouseholdMemberKey.class
 create mode 100644 api/target/classes/no/freshify/api/model/HouseholdMemberRole.class
 create mode 100644 api/target/classes/no/freshify/api/model/Item.class
 create mode 100644 api/target/classes/no/freshify/api/model/ItemStatus.class
 create mode 100644 api/target/classes/no/freshify/api/model/ItemType.class
 create mode 100644 api/target/classes/no/freshify/api/model/ShoppingListEntry.class
 create mode 100644 api/target/classes/no/freshify/api/model/User.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/CreateHousehold.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/CreateUser.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/HouseholdDTO.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/HouseholdMemberDTO.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/InventoryItem.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/ItemTypeDTO.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/LoginUser.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/ShoppingListEntryEditRequest.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/ShoppingListEntryRequest.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/ShoppingListEntryResponse.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/UpdateInventoryItem.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/UpdateUser.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/UserFull.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/UserId.class
 create mode 100644 api/target/classes/no/freshify/api/model/dto/UserTypeRequest.class
 create mode 100644 api/target/classes/no/freshify/api/model/mapper/HouseholdMapper.class
 create mode 100644 api/target/classes/no/freshify/api/model/mapper/HouseholdMapperImpl.class
 create mode 100644 api/target/classes/no/freshify/api/model/mapper/HouseholdMemberMapper.class
 create mode 100644 api/target/classes/no/freshify/api/model/mapper/HouseholdMemberMapperImpl.class
 create mode 100644 api/target/classes/no/freshify/api/model/mapper/ItemMapper.class
 create mode 100644 api/target/classes/no/freshify/api/model/mapper/ItemMapperImpl.class
 create mode 100644 api/target/classes/no/freshify/api/model/mapper/ShoppingListEntryMapper.class
 create mode 100644 api/target/classes/no/freshify/api/model/mapper/ShoppingListEntryMapperImpl.class
 create mode 100644 api/target/classes/no/freshify/api/model/mapper/UserMapper.class
 create mode 100644 api/target/classes/no/freshify/api/model/mapper/UserMapperImpl.class
 create mode 100644 api/target/classes/no/freshify/api/repository/HouseholdMemberRepository.class
 create mode 100644 api/target/classes/no/freshify/api/repository/HouseholdRepository.class
 create mode 100644 api/target/classes/no/freshify/api/repository/ItemRepository.class
 create mode 100644 api/target/classes/no/freshify/api/repository/ItemTypeRepository.class
 create mode 100644 api/target/classes/no/freshify/api/repository/ShoppingListEntryRepository.class
 create mode 100644 api/target/classes/no/freshify/api/repository/UserRepository.class
 create mode 100644 api/target/classes/no/freshify/api/security/AuthenticationService.class
 create mode 100644 api/target/classes/no/freshify/api/security/CookieFactory.class
 create mode 100644 api/target/classes/no/freshify/api/security/JwtTokenFilter.class
 create mode 100644 api/target/classes/no/freshify/api/security/JwtUserDetailsService.class
 create mode 100644 api/target/classes/no/freshify/api/security/PermissionEvaluatorImpl.class
 create mode 100644 api/target/classes/no/freshify/api/security/UserAuthentication.class
 create mode 100644 api/target/classes/no/freshify/api/security/UserDetailsImpl.class
 create mode 100644 api/target/classes/no/freshify/api/security/WebSecurityConfiguration$1.class
 create mode 100644 api/target/classes/no/freshify/api/security/WebSecurityConfiguration.class
 create mode 100644 api/target/classes/no/freshify/api/service/HouseholdMemberService.class
 create mode 100644 api/target/classes/no/freshify/api/service/HouseholdService.class
 create mode 100644 api/target/classes/no/freshify/api/service/ItemService.class
 create mode 100644 api/target/classes/no/freshify/api/service/ItemTypeService.class
 create mode 100644 api/target/classes/no/freshify/api/service/ShoppingListEntryService.class
 create mode 100644 api/target/classes/no/freshify/api/service/UserService.class
 create mode 100644 api/target/generated-sources/annotations/no/freshify/api/model/mapper/HouseholdMapperImpl.java
 create mode 100644 api/target/generated-sources/annotations/no/freshify/api/model/mapper/HouseholdMemberMapperImpl.java
 create mode 100644 api/target/generated-sources/annotations/no/freshify/api/model/mapper/ItemMapperImpl.java
 create mode 100644 api/target/generated-sources/annotations/no/freshify/api/model/mapper/ShoppingListEntryMapperImpl.java
 create mode 100644 api/target/generated-sources/annotations/no/freshify/api/model/mapper/UserMapperImpl.java
 create mode 100644 api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
 create mode 100644 api/target/test-classes/application-test.properties
 create mode 100644 api/target/test-classes/no/freshify/api/FreshifyAPIApplicationTests.class
 create mode 100644 api/target/test-classes/no/freshify/api/controller/HouseholdControllerTest.class
 create mode 100644 api/target/test-classes/no/freshify/api/controller/HouseholdMemberControllerTest.class
 create mode 100644 api/target/test-classes/no/freshify/api/controller/InventoryControllerTest.class
 create mode 100644 api/target/test-classes/no/freshify/api/controller/ItemTypeControllerTest.class
 create mode 100644 api/target/test-classes/no/freshify/api/controller/ShoppingListControllerTest.class
 create mode 100644 api/target/test-classes/no/freshify/api/controller/UserControllerTest.class
 create mode 100644 api/target/test-classes/no/freshify/api/security/TestAuthenticationService.class
 create mode 100644 api/target/test-classes/no/freshify/api/security/TestCookieFactory.class
 create mode 100644 api/target/test-classes/no/freshify/api/security/TestPermissionEvaluator.class
 create mode 100644 api/target/test-classes/no/freshify/api/service/HouseholdMemberServiceTest.class
 create mode 100644 api/target/test-classes/no/freshify/api/service/HouseholdServiceTest.class
 create mode 100644 api/target/test-classes/no/freshify/api/service/ItemServiceTest.class
 create mode 100644 api/target/test-classes/no/freshify/api/service/ItemTypeServiceTest.class
 create mode 100644 api/target/test-classes/no/freshify/api/service/ShoppingListEntryServiceTest.class
 create mode 100644 api/target/test-classes/no/freshify/api/service/UserServiceTest.class

diff --git a/api/.idea/.gitignore b/api/.idea/.gitignore
new file mode 100644
index 0000000..13566b8
--- /dev/null
+++ b/api/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Editor-based HTTP Client requests
+/httpRequests/
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
diff --git a/api/.idea/compiler.xml b/api/.idea/compiler.xml
new file mode 100644
index 0000000..89a4163
--- /dev/null
+++ b/api/.idea/compiler.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile default="true" name="Default" enabled="true" />
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+      </profile>
+      <profile name="Annotation profile for Freshify API" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <processorPath useClasspath="false">
+          <entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok/1.18.20/lombok-1.18.20.jar" />
+          <entry name="$MAVEN_REPOSITORY$/org/projectlombok/lombok-mapstruct-binding/0.2.0/lombok-mapstruct-binding-0.2.0.jar" />
+          <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct-processor/1.4.2.Final/mapstruct-processor-1.4.2.Final.jar" />
+          <entry name="$MAVEN_REPOSITORY$/org/mapstruct/mapstruct/1.4.2.Final/mapstruct-1.4.2.Final.jar" />
+        </processorPath>
+        <module name="api" />
+      </profile>
+    </annotationProcessing>
+  </component>
+  <component name="JavacSettings">
+    <option name="ADDITIONAL_OPTIONS_OVERRIDE">
+      <module name="api" options="-parameters" />
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/api/.idea/encodings.xml b/api/.idea/encodings.xml
new file mode 100644
index 0000000..63e9001
--- /dev/null
+++ b/api/.idea/encodings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/api/.idea/jarRepositories.xml b/api/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/api/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="RemoteRepositoriesConfiguration">
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Central Repository" />
+      <option name="url" value="https://repo.maven.apache.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="central" />
+      <option name="name" value="Maven Central repository" />
+      <option name="url" value="https://repo1.maven.org/maven2" />
+    </remote-repository>
+    <remote-repository>
+      <option name="id" value="jboss.community" />
+      <option name="name" value="JBoss Community repository" />
+      <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
+    </remote-repository>
+  </component>
+</project>
\ No newline at end of file
diff --git a/api/.idea/jpa-buddy.xml b/api/.idea/jpa-buddy.xml
new file mode 100644
index 0000000..898e07a
--- /dev/null
+++ b/api/.idea/jpa-buddy.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="JpaBuddyIdeaProjectConfig">
+    <option name="defaultUnitInitialized" value="true" />
+    <option name="renamerInitialized" value="true" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/api/.idea/misc.xml b/api/.idea/misc.xml
new file mode 100644
index 0000000..82ab2cc
--- /dev/null
+++ b/api/.idea/misc.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK" />
+  <component name="ProjectType">
+    <option name="id" value="jpab" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/api/.idea/uiDesigner.xml b/api/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/api/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
\ No newline at end of file
diff --git a/api/.idea/vcs.xml b/api/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/api/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/api/api.iml b/api/api.iml
new file mode 100644
index 0000000..aa3916f
--- /dev/null
+++ b/api/api.iml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots />
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+    <facet type="jpa" name="JPA">
+      <configuration>
+        <setting name="validation-enabled" value="true" />
+        <setting name="provider-name" value="Hibernate" />
+        <datasource-mapping />
+        <naming-strategy-map />
+      </configuration>
+    </facet>
+    <facet type="Spring" name="Spring">
+      <configuration />
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_17">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-data-jpa:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-aop:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.aspectj:aspectjweaver:1.9.19" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.zaxxer:HikariCP:5.0.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jdbc:6.0.7" level="project" />
+    <orderEntry type="library" name="Maven: org.hibernate.orm:hibernate-core:6.1.7.Final" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.persistence:jakarta.persistence-api:3.1.0" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.transaction:jakarta.transaction-api:2.0.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss.logging:jboss-logging:3.5.0.Final" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.hibernate.common:hibernate-commons-annotations:6.0.6.Final" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.jboss:jandex:2.4.2.Final" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: net.bytebuddy:byte-buddy:1.12.23" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.glassfish.jaxb:jaxb-runtime:4.0.2" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.glassfish.jaxb:jaxb-core:4.0.2" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.eclipse.angus:angus-activation:2.0.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.glassfish.jaxb:txw2:4.0.2" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.sun.istack:istack-commons-runtime:4.1.1" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: jakarta.inject:jakarta.inject-api:2.0.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: org.antlr:antlr4-runtime:4.10.1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-jpa:3.0.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.data:spring-data-commons:3.0.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-orm:6.0.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-context:6.0.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-tx:6.0.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-beans:6.0.7" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:2.1.1" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:2.0.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aspects:6.0.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-oauth2-client:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.4.6" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.4.6" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.19.0" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.19.0" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:2.0.7" level="project" />
+    <orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.33" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-config:6.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-core:6.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-crypto:6.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-expression:6.0.7" level="project" />
+    <orderEntry type="library" name="Maven: io.micrometer:micrometer-observation:1.10.5" level="project" />
+    <orderEntry type="library" name="Maven: io.micrometer:micrometer-commons:1.10.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-oauth2-client:6.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-oauth2-core:6.0.2" level="project" />
+    <orderEntry type="library" name="Maven: com.nimbusds:oauth2-oidc-sdk:9.43.1" level="project" />
+    <orderEntry type="library" name="Maven: com.github.stephenc.jcip:jcip-annotations:1.0-1" level="project" />
+    <orderEntry type="library" name="Maven: com.nimbusds:content-type:2.2" level="project" />
+    <orderEntry type="library" name="Maven: com.nimbusds:lang-tag:1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-oauth2-jose:6.0.2" level="project" />
+    <orderEntry type="library" name="Maven: com.nimbusds:nimbus-jose-jwt:9.24.4" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-oauth2-resource-server:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-oauth2-resource-server:6.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-security:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-aop:6.0.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.security:spring-security-web:6.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.14.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.14.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.14.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.14.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.14.2" level="project" />
+    <orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.14.2" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:3.0.5" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:10.1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:10.1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:10.1.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-web:6.0.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-webmvc:6.0.7" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.h2database:h2:2.1.214" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: com.mysql:mysql-connector-j:8.0.32" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-starter-test:3.0.5" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test:3.0.5" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.boot:spring-boot-test-autoconfigure:3.0.5" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.jayway.jsonpath:json-path:2.7.0" level="project" />
+    <orderEntry type="library" name="Maven: net.minidev:json-smart:2.4.10" level="project" />
+    <orderEntry type="library" name="Maven: net.minidev:accessors-smart:2.4.9" level="project" />
+    <orderEntry type="library" name="Maven: org.ow2.asm:asm:9.3" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:4.0.0" level="project" />
+    <orderEntry type="library" scope="RUNTIME" name="Maven: jakarta.activation:jakarta.activation-api:2.1.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.assertj:assertj-core:3.23.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.hamcrest:hamcrest:2.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter:5.9.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-api:5.9.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.opentest4j:opentest4j:1.2.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-commons:1.9.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.apiguardian:apiguardian-api:1.1.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-params:5.9.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.jupiter:junit-jupiter-engine:5.9.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.junit.platform:junit-platform-engine:1.9.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-core:4.8.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: net.bytebuddy:byte-buddy-agent:1.12.23" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.objenesis:objenesis:3.2" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.mockito:mockito-junit-jupiter:4.8.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.skyscreamer:jsonassert:1.5.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: com.vaadin.external.google:android-json:0.0.20131108.vaadin1" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-core:6.0.7" level="project" />
+    <orderEntry type="library" name="Maven: org.springframework:spring-jcl:6.0.7" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework:spring-test:6.0.7" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.xmlunit:xmlunit-core:2.9.1" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.springframework.security:spring-security-test:6.0.2" level="project" />
+    <orderEntry type="library" name="Maven: org.projectlombok:lombok:1.18.26" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/api/database/localdb.mv.db b/api/database/localdb.mv.db
new file mode 100644
index 0000000000000000000000000000000000000000..72d9f048bac533ab2f04d7b0ed090c910dc68ec0
GIT binary patch
literal 65536
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
Cd-v7=

literal 0
HcmV?d00001

diff --git a/api/database/localdb.trace.db b/api/database/localdb.trace.db
new file mode 100644
index 0000000..2dc86ca
--- /dev/null
+++ b/api/database/localdb.trace.db
@@ -0,0 +1,163 @@
+2023-04-20 13:36:10 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (1, 1, 'OWNER') [42102-214]
+2023-04-20 13:36:10 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (1, 2, 'MEMBER') [42102-214]
+2023-04-20 13:36:10 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (2, 3, 'OWNER') [42102-214]
+2023-04-20 13:36:10 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (2, 4, 'MEMBER') [42102-214]
+2023-04-20 13:36:10 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (3, 5, 'OWNER') [42102-214]
+2023-04-20 13:36:10 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (3, 6, 'MEMBER') [42102-214]
+2023-04-20 13:36:10 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (4, 7, 'OWNER') [42102-214]
+2023-04-20 13:36:10 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (4, 8, 'MEMBER') [42102-214]
+2023-04-20 13:36:10 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (5, 9, 'OWNER') [42102-214]
+2023-04-20 13:36:10 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (5, 10, 'MEMBER') [42102-214]
+2023-04-20 13:37:12 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "[*]HOUSEHOLD_MEMBER ITEM HOUSEHOLD_MEMBER HOUSEHOLD"; expected "HELP"; SQL statement:
+HOUSEHOLD_MEMBER ITEM HOUSEHOLD_MEMBER HOUSEHOLD [42001-214]
+2023-04-20 13:46:14 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (1, 1, 'SUPERUSER') [42102-214]
+2023-04-20 13:46:14 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (1, 2, 'USER') [42102-214]
+2023-04-20 13:46:14 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (2, 3, 'SUPERUSER') [42102-214]
+2023-04-20 13:46:14 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (2, 4, 'USER') [42102-214]
+2023-04-20 13:46:14 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (3, 5, 'SUPERUSER') [42102-214]
+2023-04-20 13:46:14 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (3, 6, 'USER') [42102-214]
+2023-04-20 13:46:14 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (4, 7, 'SUPERUSER') [42102-214]
+2023-04-20 13:46:14 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (4, 8, 'USER') [42102-214]
+2023-04-20 13:46:14 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (5, 9, 'SUPERUSER') [42102-214]
+2023-04-20 13:46:14 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "HOUSEHOLDMEMBER" not found; SQL statement:
+INSERT INTO HouseholdMember (household_id, user_id, role) VALUES (5, 10, 'USER') [42102-214]
+2023-04-21 14:24:07 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Column "type test" not found; SQL statement:
+INSERT INTO ITEM_TYPE VALUES(1, "type test") [42122-214]
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:502)
+	at org.h2.message.DbException.getJdbcSQLException(DbException.java:477)
+	at org.h2.message.DbException.get(DbException.java:223)
+	at org.h2.message.DbException.get(DbException.java:199)
+	at org.h2.expression.ExpressionColumn.getColumnException(ExpressionColumn.java:244)
+	at org.h2.expression.ExpressionColumn.optimizeOther(ExpressionColumn.java:226)
+	at org.h2.expression.ExpressionColumn.optimize(ExpressionColumn.java:213)
+	at org.h2.command.dml.Insert.doPrepare(Insert.java:300)
+	at org.h2.command.dml.DataChangeStatement.prepare(DataChangeStatement.java:37)
+	at org.h2.command.Parser.prepareCommand(Parser.java:575)
+	at org.h2.engine.SessionLocal.prepareLocal(SessionLocal.java:631)
+	at org.h2.engine.SessionLocal.prepareCommand(SessionLocal.java:554)
+	at org.h2.jdbc.JdbcConnection.prepareCommand(JdbcConnection.java:1116)
+	at org.h2.jdbc.JdbcStatement.executeInternal(JdbcStatement.java:237)
+	at org.h2.jdbc.JdbcStatement.execute(JdbcStatement.java:223)
+	at org.h2.server.web.WebApp.getResult(WebApp.java:1339)
+	at org.h2.server.web.WebApp.query(WebApp.java:1137)
+	at org.h2.server.web.WebApp.query(WebApp.java:1113)
+	at org.h2.server.web.WebApp.process(WebApp.java:244)
+	at org.h2.server.web.WebApp.processRequest(WebApp.java:176)
+	at org.h2.server.web.JakartaWebServlet.doGet(JakartaWebServlet.java:129)
+	at org.h2.server.web.JakartaWebServlet.doPost(JakartaWebServlet.java:166)
+	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:563)
+	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:631)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
+	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
+	at no.freshify.api.security.JwtTokenFilter.doFilterInternal(JwtTokenFilter.java:66)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
+	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:219)
+	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:191)
+	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:352)
+	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:268)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
+	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
+	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
+	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)
+	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116)
+	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
+	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
+	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:166)
+	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
+	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
+	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
+	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
+	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
+	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:341)
+	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:390)
+	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
+	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:894)
+	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741)
+	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
+	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
+	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
+	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
+	at java.base/java.lang.Thread.run(Thread.java:833)
+2023-04-21 14:25:36 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEMTYPE" not found; SQL statement:
+INSERT INTO ItemType (name) VALUES ('Shirt') [42102-214]
+2023-04-21 14:25:36 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEMTYPE" not found; SQL statement:
+INSERT INTO ItemType (name) VALUES ('Pants') [42102-214]
+2023-04-21 14:25:36 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEMTYPE" not found; SQL statement:
+INSERT INTO ItemType (name) VALUES ('Dress') [42102-214]
+2023-04-21 14:25:36 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEMTYPE" not found; SQL statement:
+INSERT INTO ItemType (name) VALUES ('Jacket') [42102-214]
+2023-04-21 14:25:36 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEMTYPE" not found; SQL statement:
+INSERT INTO ItemType (name) VALUES ('Hat') [42102-214]
+2023-04-21 14:25:36 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEMTYPE" not found; SQL statement:
+INSERT INTO ItemType (name) VALUES ('Shoes') [42102-214]
+2023-04-21 14:25:36 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEMTYPE" not found; SQL statement:
+INSERT INTO ItemType (name) VALUES ('Socks') [42102-214]
+2023-04-21 14:25:36 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEMTYPE" not found; SQL statement:
+INSERT INTO ItemType (name) VALUES ('Sweater') [42102-214]
+2023-04-21 14:25:36 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEMTYPE" not found; SQL statement:
+INSERT INTO ItemType (name) VALUES ('Shorts') [42102-214]
+2023-04-21 14:25:36 jdbc[13]: exception
+org.h2.jdbc.JdbcSQLSyntaxErrorException: Table "ITEMTYPE" not found; SQL statement:
+INSERT INTO ItemType (name) VALUES ('Skirt') [42102-214]
diff --git a/api/target/classes/application-dev.properties b/api/target/classes/application-dev.properties
new file mode 100644
index 0000000..7fa9ec4
--- /dev/null
+++ b/api/target/classes/application-dev.properties
@@ -0,0 +1,12 @@
+spring.h2.console.enabled=true
+spring.h2.console.path=/h2-ui
+
+spring.datasource.url=jdbc:mysql://127.0.0.1:56000/freshify_dev
+spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
+spring.jpa.database-platform=org.hibernate.dialect.MySQLDialect
+spring.jpa.hibernate.ddl-auto=update
+spring.datasource.username=root
+spring.datasource.password=freshify
+spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect
+
+jwt.secret=abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz
\ No newline at end of file
diff --git a/api/target/classes/application.properties b/api/target/classes/application.properties
new file mode 100644
index 0000000..cbb42d2
--- /dev/null
+++ b/api/target/classes/application.properties
@@ -0,0 +1 @@
+spring.profiles.active=dev
diff --git a/api/target/classes/insert_item_types.sql b/api/target/classes/insert_item_types.sql
new file mode 100644
index 0000000..3b5baf1
--- /dev/null
+++ b/api/target/classes/insert_item_types.sql
@@ -0,0 +1,998 @@
+USE freshify_dev;
+START TRANSACTION;
+INSERT INTO item_type (name) VALUES ('Ã…bor');
+INSERT INTO item_type (name) VALUES ('Adzukibønner');
+INSERT INTO item_type (name) VALUES ('Agurk');
+INSERT INTO item_type (name) VALUES ('Agurker');
+INSERT INTO item_type (name) VALUES ('Agurksalat');
+INSERT INTO item_type (name) VALUES ('Aioli');
+INSERT INTO item_type (name) VALUES ('Ajvar');
+INSERT INTO item_type (name) VALUES ('Akkar');
+INSERT INTO item_type (name) VALUES ('Ã…l');
+INSERT INTO item_type (name) VALUES ('Alaska pollock');
+INSERT INTO item_type (name) VALUES ('Alfalfaspirer');
+INSERT INTO item_type (name) VALUES ('Alkoholholdige drikkevarer');
+INSERT INTO item_type (name) VALUES ('Amaranth');
+INSERT INTO item_type (name) VALUES ('Ananas');
+INSERT INTO item_type (name) VALUES ('Ananasjuice');
+INSERT INTO item_type (name) VALUES ('And');
+INSERT INTO item_type (name) VALUES ('Andre kaker o.l.');
+INSERT INTO item_type (name) VALUES ('Anisfrø');
+INSERT INTO item_type (name) VALUES ('Ansjos');
+INSERT INTO item_type (name) VALUES ('Appelsin');
+INSERT INTO item_type (name) VALUES ('Appelsinjuice');
+INSERT INTO item_type (name) VALUES ('Appelsinmarmelade');
+INSERT INTO item_type (name) VALUES ('Appelsinsaft');
+INSERT INTO item_type (name) VALUES ('Appelsinskall');
+INSERT INTO item_type (name) VALUES ('Aprikos');
+INSERT INTO item_type (name) VALUES ('Aprikossyltetøy');
+INSERT INTO item_type (name) VALUES ('Aronia');
+INSERT INTO item_type (name) VALUES ('Artiskokk');
+INSERT INTO item_type (name) VALUES ('Asparges');
+INSERT INTO item_type (name) VALUES ('Aspargesbønner');
+INSERT INTO item_type (name) VALUES ('Aspargessuppe');
+INSERT INTO item_type (name) VALUES ('Aubergine');
+INSERT INTO item_type (name) VALUES ('Avokado');
+INSERT INTO item_type (name) VALUES ('Avokado- og kikertpålegg');
+INSERT INTO item_type (name) VALUES ('Babygulrot');
+INSERT INTO item_type (name) VALUES ('Babymais');
+INSERT INTO item_type (name) VALUES ('Babyspinat');
+INSERT INTO item_type (name) VALUES ('Baconcrisp');
+INSERT INTO item_type (name) VALUES ('Baconost');
+INSERT INTO item_type (name) VALUES ('Baconpostei ');
+INSERT INTO item_type (name) VALUES ('Bagels');
+INSERT INTO item_type (name) VALUES ('Baguett');
+INSERT INTO item_type (name) VALUES ('Baguette');
+INSERT INTO item_type (name) VALUES ('Bakepulver');
+INSERT INTO item_type (name) VALUES ('Balsamicoeddik');
+INSERT INTO item_type (name) VALUES ('Bambusskudd');
+INSERT INTO item_type (name) VALUES ('Banan');
+INSERT INTO item_type (name) VALUES ('Bananchips');
+INSERT INTO item_type (name) VALUES ('Banankake');
+INSERT INTO item_type (name) VALUES ('Bankekjøtt');
+INSERT INTO item_type (name) VALUES ('Barnemat');
+INSERT INTO item_type (name) VALUES ('Basilikum');
+INSERT INTO item_type (name) VALUES ('Bayonneskinke');
+INSERT INTO item_type (name) VALUES ('Belgfrukter');
+INSERT INTO item_type (name) VALUES ('Berlinerbolle');
+INSERT INTO item_type (name) VALUES ('Berlinerkrans');
+INSERT INTO item_type (name) VALUES ('Bernaisesaus');
+INSERT INTO item_type (name) VALUES ('Betasuppe');
+INSERT INTO item_type (name) VALUES ('Bidos');
+INSERT INTO item_type (name) VALUES ('Biff stroganoff');
+INSERT INTO item_type (name) VALUES ('Biscotti');
+INSERT INTO item_type (name) VALUES ('Bjørnebær');
+INSERT INTO item_type (name) VALUES ('Bjørnebærsyltetøy');
+INSERT INTO item_type (name) VALUES ('Blåbær');
+INSERT INTO item_type (name) VALUES ('Blåbærsyltetøy');
+INSERT INTO item_type (name) VALUES ('Bladsalat');
+INSERT INTO item_type (name) VALUES ('Blåkveite');
+INSERT INTO item_type (name) VALUES ('Blålange');
+INSERT INTO item_type (name) VALUES ('Blåskjell');
+INSERT INTO item_type (name) VALUES ('Blod');
+INSERT INTO item_type (name) VALUES ('Blodpudding');
+INSERT INTO item_type (name) VALUES ('Blokkebær');
+INSERT INTO item_type (name) VALUES ('Blomkål');
+INSERT INTO item_type (name) VALUES ('Blomkål/brokkolisuppe');
+INSERT INTO item_type (name) VALUES ('Blomkålsuppe');
+INSERT INTO item_type (name) VALUES ('Bløtkake');
+INSERT INTO item_type (name) VALUES ('Bogskinke');
+INSERT INTO item_type (name) VALUES ('Bokhvete');
+INSERT INTO item_type (name) VALUES ('Bokhvetemel');
+INSERT INTO item_type (name) VALUES ('Bolle');
+INSERT INTO item_type (name) VALUES ('Bondebønner');
+INSERT INTO item_type (name) VALUES ('Bønnegryte');
+INSERT INTO item_type (name) VALUES ('Bønnekarbonader');
+INSERT INTO item_type (name) VALUES ('Bønne- og olivensalat');
+INSERT INTO item_type (name) VALUES ('Bønner');
+INSERT INTO item_type (name) VALUES ('Bønnespirer');
+INSERT INTO item_type (name) VALUES ('Borlottibønner');
+INSERT INTO item_type (name) VALUES ('Bouillabaisse');
+INSERT INTO item_type (name) VALUES ('Breiflabb');
+INSERT INTO item_type (name) VALUES ('Brelett');
+INSERT INTO item_type (name) VALUES ('Bremykt');
+INSERT INTO item_type (name) VALUES ('Brennesle');
+INSERT INTO item_type (name) VALUES ('Brennevin');
+INSERT INTO item_type (name) VALUES ('Brie');
+INSERT INTO item_type (name) VALUES ('Bringebær');
+INSERT INTO item_type (name) VALUES ('Bringebærsyltetøy');
+INSERT INTO item_type (name) VALUES ('Brioche');
+INSERT INTO item_type (name) VALUES ('Brisling');
+INSERT INTO item_type (name) VALUES ('Brød');
+INSERT INTO item_type (name) VALUES ('Brødvarer');
+INSERT INTO item_type (name) VALUES ('Brokkoli');
+INSERT INTO item_type (name) VALUES ('Brokkolisuppe');
+INSERT INTO item_type (name) VALUES ('Brønnkarse');
+INSERT INTO item_type (name) VALUES ('Brosme');
+INSERT INTO item_type (name) VALUES ('Brownies');
+INSERT INTO item_type (name) VALUES ('Brune bønner');
+INSERT INTO item_type (name) VALUES ('Brune pinner');
+INSERT INTO item_type (name) VALUES ('Brunost');
+INSERT INTO item_type (name) VALUES ('Brun saus');
+INSERT INTO item_type (name) VALUES ('Brus');
+INSERT INTO item_type (name) VALUES ('Bulgurgryn');
+INSERT INTO item_type (name) VALUES ('Buljongpulver');
+INSERT INTO item_type (name) VALUES ('Butterdeig');
+INSERT INTO item_type (name) VALUES ('Byggmel');
+INSERT INTO item_type (name) VALUES ('Byggryn');
+INSERT INTO item_type (name) VALUES ('Byggrynsgrøt');
+INSERT INTO item_type (name) VALUES ('Cæsardressing');
+INSERT INTO item_type (name) VALUES ('Cæsarsalat');
+INSERT INTO item_type (name) VALUES ('Café au lait');
+INSERT INTO item_type (name) VALUES ('Caffe latte');
+INSERT INTO item_type (name) VALUES ('Caffe mocca');
+INSERT INTO item_type (name) VALUES ('Camembert');
+INSERT INTO item_type (name) VALUES ('Cappucino');
+INSERT INTO item_type (name) VALUES ('Carambola');
+INSERT INTO item_type (name) VALUES ('Cashewnøtter');
+INSERT INTO item_type (name) VALUES ('Cashewnøttpålegg');
+INSERT INTO item_type (name) VALUES ('Chapatti');
+INSERT INTO item_type (name) VALUES ('Chayote');
+INSERT INTO item_type (name) VALUES ('Cheddar');
+INSERT INTO item_type (name) VALUES ('Cheddarsaus');
+INSERT INTO item_type (name) VALUES ('Cheeseburger');
+INSERT INTO item_type (name) VALUES ('Cherimoya');
+INSERT INTO item_type (name) VALUES ('Cherrytomat');
+INSERT INTO item_type (name) VALUES ('Chevre');
+INSERT INTO item_type (name) VALUES ('Chiafrø');
+INSERT INTO item_type (name) VALUES ('Chiapudding');
+INSERT INTO item_type (name) VALUES ('Chili');
+INSERT INTO item_type (name) VALUES ('Chili con carne');
+INSERT INTO item_type (name) VALUES ('Chilinøtter');
+INSERT INTO item_type (name) VALUES ('Chilipulver');
+INSERT INTO item_type (name) VALUES ('Chilisaus');
+INSERT INTO item_type (name) VALUES ('Chorizo');
+INSERT INTO item_type (name) VALUES ('Ciabatta');
+INSERT INTO item_type (name) VALUES ('Cider');
+INSERT INTO item_type (name) VALUES ('Coleslaw');
+INSERT INTO item_type (name) VALUES ('Corn flakes');
+INSERT INTO item_type (name) VALUES ('Cortado');
+INSERT INTO item_type (name) VALUES ('Cottage Cheese');
+INSERT INTO item_type (name) VALUES ('Couscous');
+INSERT INTO item_type (name) VALUES ('Crabsticksalat');
+INSERT INTO item_type (name) VALUES ('Crème Chérie');
+INSERT INTO item_type (name) VALUES ('Crème Fraîche');
+INSERT INTO item_type (name) VALUES ('Croissant');
+INSERT INTO item_type (name) VALUES ('Cupcakes');
+INSERT INTO item_type (name) VALUES ('Daddel');
+INSERT INTO item_type (name) VALUES ('Daimkake');
+INSERT INTO item_type (name) VALUES ('Delfiakake');
+INSERT INTO item_type (name) VALUES ('Dessert');
+INSERT INTO item_type (name) VALUES ('Dessert-topping på boks');
+INSERT INTO item_type (name) VALUES ('Dessertvin');
+INSERT INTO item_type (name) VALUES ('Dill');
+INSERT INTO item_type (name) VALUES ('Dipsaus');
+INSERT INTO item_type (name) VALUES ('Donuts');
+INSERT INTO item_type (name) VALUES ('Dressing');
+INSERT INTO item_type (name) VALUES ('Drikke');
+INSERT INTO item_type (name) VALUES ('Drue');
+INSERT INTO item_type (name) VALUES ('Druejuice');
+INSERT INTO item_type (name) VALUES ('Edamamebønner');
+INSERT INTO item_type (name) VALUES ('Edamer');
+INSERT INTO item_type (name) VALUES ('Eddik');
+INSERT INTO item_type (name) VALUES ('Egg');
+INSERT INTO item_type (name) VALUES ('Eggedosis');
+INSERT INTO item_type (name) VALUES ('Eggehvite');
+INSERT INTO item_type (name) VALUES ('Eggekrem');
+INSERT INTO item_type (name) VALUES ('Eggeplomme');
+INSERT INTO item_type (name) VALUES ('Eggerøre');
+INSERT INTO item_type (name) VALUES ('Eggesalat');
+INSERT INTO item_type (name) VALUES ('Elg');
+INSERT INTO item_type (name) VALUES ('Endivesalat');
+INSERT INTO item_type (name) VALUES ('Energidrikk');
+INSERT INTO item_type (name) VALUES ('Eple');
+INSERT INTO item_type (name) VALUES ('Eplecidereddik');
+INSERT INTO item_type (name) VALUES ('Eplejuice');
+INSERT INTO item_type (name) VALUES ('Eplekake');
+INSERT INTO item_type (name) VALUES ('Eplemos');
+INSERT INTO item_type (name) VALUES ('Eplenektar');
+INSERT INTO item_type (name) VALUES ('Eplepai');
+INSERT INTO item_type (name) VALUES ('Erter');
+INSERT INTO item_type (name) VALUES ('Ertestuing');
+INSERT INTO item_type (name) VALUES ('Espresso');
+INSERT INTO item_type (name) VALUES ('Estragon');
+INSERT INTO item_type (name) VALUES ('Falafel');
+INSERT INTO item_type (name) VALUES ('Falukorv');
+INSERT INTO item_type (name) VALUES ('Fårepølse');
+INSERT INTO item_type (name) VALUES ('Fårikål av lammekjøtt');
+INSERT INTO item_type (name) VALUES ('Feltsalat');
+INSERT INTO item_type (name) VALUES ('Fenalår');
+INSERT INTO item_type (name) VALUES ('Fennikel');
+INSERT INTO item_type (name) VALUES ('Fennikelfrø');
+INSERT INTO item_type (name) VALUES ('Fersken');
+INSERT INTO item_type (name) VALUES ('Feta');
+INSERT INTO item_type (name) VALUES ('Fet fisk');
+INSERT INTO item_type (name) VALUES ('Fiken');
+INSERT INTO item_type (name) VALUES ('Filodeig');
+INSERT INTO item_type (name) VALUES ('Fiskeboller');
+INSERT INTO item_type (name) VALUES ('Fiskeburger');
+INSERT INTO item_type (name) VALUES ('Fiskefarse');
+INSERT INTO item_type (name) VALUES ('Fiskegrateng');
+INSERT INTO item_type (name) VALUES ('Fiskegryte');
+INSERT INTO item_type (name) VALUES ('Fiskekaker');
+INSERT INTO item_type (name) VALUES ('Fiskekarbonader');
+INSERT INTO item_type (name) VALUES ('Fiskepaté');
+INSERT INTO item_type (name) VALUES ('Fiskepinner');
+INSERT INTO item_type (name) VALUES ('Fiskeprodukter og fiskepålegg');
+INSERT INTO item_type (name) VALUES ('Fiskepudding');
+INSERT INTO item_type (name) VALUES ('Fiskesuppe');
+INSERT INTO item_type (name) VALUES ('Fisk og fiskeprodukter');
+INSERT INTO item_type (name) VALUES ('Fisk og skalldyr');
+INSERT INTO item_type (name) VALUES ('Fjørfe');
+INSERT INTO item_type (name) VALUES ('Fjørfe  ');
+INSERT INTO item_type (name) VALUES ('Fjørfe og kjøtt');
+INSERT INTO item_type (name) VALUES ('Flatbrød');
+INSERT INTO item_type (name) VALUES ('Fleskepølse');
+INSERT INTO item_type (name) VALUES ('Floradix');
+INSERT INTO item_type (name) VALUES ('Fløte');
+INSERT INTO item_type (name) VALUES ('Fløtegratinerte poteter');
+INSERT INTO item_type (name) VALUES ('Fløtemysost');
+INSERT INTO item_type (name) VALUES ('Fløyelsgrøt');
+INSERT INTO item_type (name) VALUES ('Focaccia');
+INSERT INTO item_type (name) VALUES ('Formkake');
+INSERT INTO item_type (name) VALUES ('Frityrolje');
+INSERT INTO item_type (name) VALUES ('Frokostkorn');
+INSERT INTO item_type (name) VALUES ('Frokostsalat');
+INSERT INTO item_type (name) VALUES ('Fromasj');
+INSERT INTO item_type (name) VALUES ('Fruktcocktail');
+INSERT INTO item_type (name) VALUES ('Fruktmüsli');
+INSERT INTO item_type (name) VALUES ('Frukt og bær');
+INSERT INTO item_type (name) VALUES ('Fruktpuré');
+INSERT INTO item_type (name) VALUES ('Fruktsaus');
+INSERT INTO item_type (name) VALUES ('Fruktsmoothie');
+INSERT INTO item_type (name) VALUES ('Fruktstang');
+INSERT INTO item_type (name) VALUES ('Fruktsuppe');
+INSERT INTO item_type (name) VALUES ('Fyrstekake');
+INSERT INTO item_type (name) VALUES ('Gaffelbiter');
+INSERT INTO item_type (name) VALUES ('Galiamelon');
+INSERT INTO item_type (name) VALUES ('Gamalost');
+INSERT INTO item_type (name) VALUES ('GÃ¥s');
+INSERT INTO item_type (name) VALUES ('Geitmelk');
+INSERT INTO item_type (name) VALUES ('Geitost');
+INSERT INTO item_type (name) VALUES ('Gelatin');
+INSERT INTO item_type (name) VALUES ('Gelé');
+INSERT INTO item_type (name) VALUES ('Geléfrukt');
+INSERT INTO item_type (name) VALUES ('Ghee');
+INSERT INTO item_type (name) VALUES ('Gjær');
+INSERT INTO item_type (name) VALUES ('Gjedde');
+INSERT INTO item_type (name) VALUES ('Gomme');
+INSERT INTO item_type (name) VALUES ('Gorgonzola');
+INSERT INTO item_type (name) VALUES ('Goro');
+INSERT INTO item_type (name) VALUES ('Goudaost');
+INSERT INTO item_type (name) VALUES ('Gräddost');
+INSERT INTO item_type (name) VALUES ('Granateple');
+INSERT INTO item_type (name) VALUES ('Granola');
+INSERT INTO item_type (name) VALUES ('Grapefrukt');
+INSERT INTO item_type (name) VALUES ('Grapefruktjuice');
+INSERT INTO item_type (name) VALUES ('Gresskar');
+INSERT INTO item_type (name) VALUES ('Gresskarsuppe');
+INSERT INTO item_type (name) VALUES ('Gressløk');
+INSERT INTO item_type (name) VALUES ('Grillpølse');
+INSERT INTO item_type (name) VALUES ('Grønnkål');
+INSERT INTO item_type (name) VALUES ('Grønnsaker');
+INSERT INTO item_type (name) VALUES ('Grønnsaksblanding');
+INSERT INTO item_type (name) VALUES ('Grønnsaksgryte');
+INSERT INTO item_type (name) VALUES ('Grønnsakspostei');
+INSERT INTO item_type (name) VALUES ('Grønnsaksprodukter');
+INSERT INTO item_type (name) VALUES ('Grønnsaksrøre');
+INSERT INTO item_type (name) VALUES ('Grøt ');
+INSERT INTO item_type (name) VALUES ('Grovbakstmel');
+INSERT INTO item_type (name) VALUES ('Gruyere');
+INSERT INTO item_type (name) VALUES ('Gryn');
+INSERT INTO item_type (name) VALUES ('Grytebasis');
+INSERT INTO item_type (name) VALUES ('Guacamole');
+INSERT INTO item_type (name) VALUES ('Guava');
+INSERT INTO item_type (name) VALUES ('Gudbrandsdalsost');
+INSERT INTO item_type (name) VALUES ('Gulasj');
+INSERT INTO item_type (name) VALUES ('Gulløl');
+INSERT INTO item_type (name) VALUES ('Gulost');
+INSERT INTO item_type (name) VALUES ('Gulrot');
+INSERT INTO item_type (name) VALUES ('Gulrotkake');
+INSERT INTO item_type (name) VALUES ('Gulrotsuppe');
+INSERT INTO item_type (name) VALUES ('Gurkemeie');
+INSERT INTO item_type (name) VALUES ('HÃ¥brann');
+INSERT INTO item_type (name) VALUES ('Halloumi');
+INSERT INTO item_type (name) VALUES ('Hamburger');
+INSERT INTO item_type (name) VALUES ('Hamburgerbrød');
+INSERT INTO item_type (name) VALUES ('Hare');
+INSERT INTO item_type (name) VALUES ('Hasselnøtter');
+INSERT INTO item_type (name) VALUES ('Havål');
+INSERT INTO item_type (name) VALUES ('Havre');
+INSERT INTO item_type (name) VALUES ('Havrebasert drikke');
+INSERT INTO item_type (name) VALUES ('Havreflak');
+INSERT INTO item_type (name) VALUES ('Havregrøt');
+INSERT INTO item_type (name) VALUES ('Havregryn');
+INSERT INTO item_type (name) VALUES ('Havrekli');
+INSERT INTO item_type (name) VALUES ('Havremakroner');
+INSERT INTO item_type (name) VALUES ('Havremel');
+INSERT INTO item_type (name) VALUES ('Havre- og bokhvetegrøt');
+INSERT INTO item_type (name) VALUES ('Havre- og mandelbasert drikke');
+INSERT INTO item_type (name) VALUES ('Havreputer');
+INSERT INTO item_type (name) VALUES ('Havreringer');
+INSERT INTO item_type (name) VALUES ('Havsalt');
+INSERT INTO item_type (name) VALUES ('Helmelk');
+INSERT INTO item_type (name) VALUES ('Hetvin');
+INSERT INTO item_type (name) VALUES ('Hirse');
+INSERT INTO item_type (name) VALUES ('Hjerte');
+INSERT INTO item_type (name) VALUES ('Hjertesalat');
+INSERT INTO item_type (name) VALUES ('Hjort');
+INSERT INTO item_type (name) VALUES ('Hodekål');
+INSERT INTO item_type (name) VALUES ('Hollandaisesaus');
+INSERT INTO item_type (name) VALUES ('Høne');
+INSERT INTO item_type (name) VALUES ('Honning');
+INSERT INTO item_type (name) VALUES ('Honningmelon');
+INSERT INTO item_type (name) VALUES ('Hønsefrikassé');
+INSERT INTO item_type (name) VALUES ('Horn');
+INSERT INTO item_type (name) VALUES ('Horngjel');
+INSERT INTO item_type (name) VALUES ('Hummer');
+INSERT INTO item_type (name) VALUES ('Hummus');
+INSERT INTO item_type (name) VALUES ('Husholdningshvitt');
+INSERT INTO item_type (name) VALUES ('Husholdningssaft');
+INSERT INTO item_type (name) VALUES ('Hval');
+INSERT INTO item_type (name) VALUES ('Hvete');
+INSERT INTO item_type (name) VALUES ('Hvetebrikker');
+INSERT INTO item_type (name) VALUES ('Hveteflak ristet');
+INSERT INTO item_type (name) VALUES ('Hvetekake');
+INSERT INTO item_type (name) VALUES ('Hvetekim');
+INSERT INTO item_type (name) VALUES ('Hvetekimolje');
+INSERT INTO item_type (name) VALUES ('Hvetekli');
+INSERT INTO item_type (name) VALUES ('Hvetemel');
+INSERT INTO item_type (name) VALUES ('Hvite bønner');
+INSERT INTO item_type (name) VALUES ('Hvite kakemenn');
+INSERT INTO item_type (name) VALUES ('Hvitløk');
+INSERT INTO item_type (name) VALUES ('Hvitløkspulver');
+INSERT INTO item_type (name) VALUES ('Hvit saus');
+INSERT INTO item_type (name) VALUES ('Hvitting');
+INSERT INTO item_type (name) VALUES ('Hvitvin');
+INSERT INTO item_type (name) VALUES ('Hyllebær');
+INSERT INTO item_type (name) VALUES ('Hyrdepai');
+INSERT INTO item_type (name) VALUES ('Hyse');
+INSERT INTO item_type (name) VALUES ('Ingefær');
+INSERT INTO item_type (name) VALUES ('Ingefærrot');
+INSERT INTO item_type (name) VALUES ('Innbakte pølser');
+INSERT INTO item_type (name) VALUES ('Is');
+INSERT INTO item_type (name) VALUES ('Isbergsalat');
+INSERT INTO item_type (name) VALUES ('Iskaffe');
+INSERT INTO item_type (name) VALUES ('Iskrem');
+INSERT INTO item_type (name) VALUES ('Iste');
+INSERT INTO item_type (name) VALUES ('Italiensk salat');
+INSERT INTO item_type (name) VALUES ('Jackfrukt');
+INSERT INTO item_type (name) VALUES ('Jalapeño');
+INSERT INTO item_type (name) VALUES ('Jarlsberg');
+INSERT INTO item_type (name) VALUES ('Jordbær');
+INSERT INTO item_type (name) VALUES ('Jordbærsyltetøy');
+INSERT INTO item_type (name) VALUES ('Jordskokk');
+INSERT INTO item_type (name) VALUES ('Jordskokksuppe');
+INSERT INTO item_type (name) VALUES ('Juice');
+INSERT INTO item_type (name) VALUES ('Julekake');
+INSERT INTO item_type (name) VALUES ('Kabaret');
+INSERT INTO item_type (name) VALUES ('Kaffe');
+INSERT INTO item_type (name) VALUES ('Kaffefløte');
+INSERT INTO item_type (name) VALUES ('Kaffehvitt');
+INSERT INTO item_type (name) VALUES ('Kaffemelk');
+INSERT INTO item_type (name) VALUES ('Kakao');
+INSERT INTO item_type (name) VALUES ('Kakaopulver');
+INSERT INTO item_type (name) VALUES ('Kakaosmør');
+INSERT INTO item_type (name) VALUES ('Kakebunn');
+INSERT INTO item_type (name) VALUES ('Kakekrem');
+INSERT INTO item_type (name) VALUES ('Kakemiks');
+INSERT INTO item_type (name) VALUES ('Kaktusfiken');
+INSERT INTO item_type (name) VALUES ('Kalkun');
+INSERT INTO item_type (name) VALUES ('Kalkunfilet');
+INSERT INTO item_type (name) VALUES ('Kalkunrull');
+INSERT INTO item_type (name) VALUES ('KÃ¥lrot');
+INSERT INTO item_type (name) VALUES ('KÃ¥lrotstappe');
+INSERT INTO item_type (name) VALUES ('Kalv');
+INSERT INTO item_type (name) VALUES ('Kalverull');
+INSERT INTO item_type (name) VALUES ('Kamskjell');
+INSERT INTO item_type (name) VALUES ('Kanel');
+INSERT INTO item_type (name) VALUES ('Kanelbolle');
+INSERT INTO item_type (name) VALUES ('Kanin');
+INSERT INTO item_type (name) VALUES ('Kantaloupemelon');
+INSERT INTO item_type (name) VALUES ('Kantarell');
+INSERT INTO item_type (name) VALUES ('Kapers');
+INSERT INTO item_type (name) VALUES ('Karamell');
+INSERT INTO item_type (name) VALUES ('Karamellpudding');
+INSERT INTO item_type (name) VALUES ('Karamellsaus');
+INSERT INTO item_type (name) VALUES ('Karbonadedeig');
+INSERT INTO item_type (name) VALUES ('Karbonader');
+INSERT INTO item_type (name) VALUES ('Kardemomme');
+INSERT INTO item_type (name) VALUES ('Karri');
+INSERT INTO item_type (name) VALUES ('Karripasta');
+INSERT INTO item_type (name) VALUES ('Karve');
+INSERT INTO item_type (name) VALUES ('Kassava');
+INSERT INTO item_type (name) VALUES ('Kastanjer');
+INSERT INTO item_type (name) VALUES ('Kaviar');
+INSERT INTO item_type (name) VALUES ('Kaviarmix');
+INSERT INTO item_type (name) VALUES ('Kavring');
+INSERT INTO item_type (name) VALUES ('Ketchup');
+INSERT INTO item_type (name) VALUES ('Kidneybønner');
+INSERT INTO item_type (name) VALUES ('Kikerter');
+INSERT INTO item_type (name) VALUES ('Kikertmel');
+INSERT INTO item_type (name) VALUES ('Kinakål');
+INSERT INTO item_type (name) VALUES ('Kirsebær');
+INSERT INTO item_type (name) VALUES ('Kirsebærsyltetøy');
+INSERT INTO item_type (name) VALUES ('Kiwi');
+INSERT INTO item_type (name) VALUES ('Kjeks');
+INSERT INTO item_type (name) VALUES ('Kjøleskapsgrøt');
+INSERT INTO item_type (name) VALUES ('Kjøttboller');
+INSERT INTO item_type (name) VALUES ('Kjøttbuljong');
+INSERT INTO item_type (name) VALUES ('Kjøttdeig');
+INSERT INTO item_type (name) VALUES ('Kjøttfarse');
+INSERT INTO item_type (name) VALUES ('Kjøttkaker');
+INSERT INTO item_type (name) VALUES ('Kjøttkaker med ertestuing');
+INSERT INTO item_type (name) VALUES ('Kjøttpølse');
+INSERT INTO item_type (name) VALUES ('Kjøttprodukter og kjøttpålegg');
+INSERT INTO item_type (name) VALUES ('Kjøttpudding');
+INSERT INTO item_type (name) VALUES ('Kjøttsuppe med grønnsaker og poteter');
+INSERT INTO item_type (name) VALUES ('Klementin');
+INSERT INTO item_type (name) VALUES ('Klibrød');
+INSERT INTO item_type (name) VALUES ('Klippfisk');
+INSERT INTO item_type (name) VALUES ('Knakkpølse');
+INSERT INTO item_type (name) VALUES ('Knekkebrød');
+INSERT INTO item_type (name) VALUES ('Knutekål');
+INSERT INTO item_type (name) VALUES ('Kokebanan');
+INSERT INTO item_type (name) VALUES ('Kokosbasert drikke');
+INSERT INTO item_type (name) VALUES ('Kokosbolle');
+INSERT INTO item_type (name) VALUES ('Kokosbollekake');
+INSERT INTO item_type (name) VALUES ('Kokosfett');
+INSERT INTO item_type (name) VALUES ('Kokosmakroner');
+INSERT INTO item_type (name) VALUES ('Kokosmasse');
+INSERT INTO item_type (name) VALUES ('Kokosmel');
+INSERT INTO item_type (name) VALUES ('Kokosmelk');
+INSERT INTO item_type (name) VALUES ('Kokosnøtt');
+INSERT INTO item_type (name) VALUES ('Kokosolje');
+INSERT INTO item_type (name) VALUES ('Kokt laks med urtesaus');
+INSERT INTO item_type (name) VALUES ('Kokt skinke');
+INSERT INTO item_type (name) VALUES ('Kompott');
+INSERT INTO item_type (name) VALUES ('Kondensert melk');
+INSERT INTO item_type (name) VALUES ('Kongereke');
+INSERT INTO item_type (name) VALUES ('Koriander');
+INSERT INTO item_type (name) VALUES ('Korianderfrø');
+INSERT INTO item_type (name) VALUES ('Kornblanding');
+INSERT INTO item_type (name) VALUES ('Korn- og bakevarer');
+INSERT INTO item_type (name) VALUES ('Krabbe');
+INSERT INTO item_type (name) VALUES ('Krabbepinner');
+INSERT INTO item_type (name) VALUES ('Kransekake');
+INSERT INTO item_type (name) VALUES ('Krekling');
+INSERT INTO item_type (name) VALUES ('Krem');
+INSERT INTO item_type (name) VALUES ('Kremfløte');
+INSERT INTO item_type (name) VALUES ('Kremost');
+INSERT INTO item_type (name) VALUES ('Kreps');
+INSERT INTO item_type (name) VALUES ('Krepsehale');
+INSERT INTO item_type (name) VALUES ('Kringle');
+INSERT INTO item_type (name) VALUES ('Krumkaker');
+INSERT INTO item_type (name) VALUES ('Kruskakli');
+INSERT INTO item_type (name) VALUES ('Krydderkake');
+INSERT INTO item_type (name) VALUES ('Kumquat');
+INSERT INTO item_type (name) VALUES ('Kvæfjordkake');
+INSERT INTO item_type (name) VALUES ('Kvarg');
+INSERT INTO item_type (name) VALUES ('Kveite');
+INSERT INTO item_type (name) VALUES ('Kylling');
+INSERT INTO item_type (name) VALUES ('Kyllingburger');
+INSERT INTO item_type (name) VALUES ('Kyllinggryte');
+INSERT INTO item_type (name) VALUES ('Kyllingnuggets');
+INSERT INTO item_type (name) VALUES ('Kylling- og kalkunpølse');
+INSERT INTO item_type (name) VALUES ('Kyllingpostei');
+INSERT INTO item_type (name) VALUES ('Kyllingskinn');
+INSERT INTO item_type (name) VALUES ('Lakris');
+INSERT INTO item_type (name) VALUES ('Lakriskonfekt');
+INSERT INTO item_type (name) VALUES ('Laks');
+INSERT INTO item_type (name) VALUES ('Laksepålegg');
+INSERT INTO item_type (name) VALUES ('Lam');
+INSERT INTO item_type (name) VALUES ('Lammefrikassé');
+INSERT INTO item_type (name) VALUES ('Lammerull');
+INSERT INTO item_type (name) VALUES ('Lange');
+INSERT INTO item_type (name) VALUES ('Lapskaus');
+INSERT INTO item_type (name) VALUES ('Lasagne');
+INSERT INTO item_type (name) VALUES ('Laurbærblad');
+INSERT INTO item_type (name) VALUES ('Lefse');
+INSERT INTO item_type (name) VALUES ('Lettmelk');
+INSERT INTO item_type (name) VALUES ('Lettøl');
+INSERT INTO item_type (name) VALUES ('Lettrømme');
+INSERT INTO item_type (name) VALUES ('Lever');
+INSERT INTO item_type (name) VALUES ('Leverpostei');
+INSERT INTO item_type (name) VALUES ('Likør');
+INSERT INTO item_type (name) VALUES ('Limabønner');
+INSERT INTO item_type (name) VALUES ('Lime');
+INSERT INTO item_type (name) VALUES ('Linfrø');
+INSERT INTO item_type (name) VALUES ('Linfrøolje');
+INSERT INTO item_type (name) VALUES ('Linse- og bønnesalat');
+INSERT INTO item_type (name) VALUES ('Linser');
+INSERT INTO item_type (name) VALUES ('Litchi');
+INSERT INTO item_type (name) VALUES ('Loff');
+INSERT INTO item_type (name) VALUES ('Løk');
+INSERT INTO item_type (name) VALUES ('Løksuppe');
+INSERT INTO item_type (name) VALUES ('Lomre');
+INSERT INTO item_type (name) VALUES ('Lotusrot');
+INSERT INTO item_type (name) VALUES ('Lungemos');
+INSERT INTO item_type (name) VALUES ('Lussekatter');
+INSERT INTO item_type (name) VALUES ('Lutefisk');
+INSERT INTO item_type (name) VALUES ('Lyr');
+INSERT INTO item_type (name) VALUES ('Macadamianøtter');
+INSERT INTO item_type (name) VALUES ('Macchiato');
+INSERT INTO item_type (name) VALUES ('Mager fisk');
+INSERT INTO item_type (name) VALUES ('Magerost');
+INSERT INTO item_type (name) VALUES ('Mais');
+INSERT INTO item_type (name) VALUES ('Maismel');
+INSERT INTO item_type (name) VALUES ('Mais- og risflak');
+INSERT INTO item_type (name) VALUES ('Maisolje');
+INSERT INTO item_type (name) VALUES ('Maisstivelse');
+INSERT INTO item_type (name) VALUES ('Majones');
+INSERT INTO item_type (name) VALUES ('Makrell');
+INSERT INTO item_type (name) VALUES ('Makrell i tomat');
+INSERT INTO item_type (name) VALUES ('Manchego');
+INSERT INTO item_type (name) VALUES ('Mandelbasert drikke');
+INSERT INTO item_type (name) VALUES ('Mandelmel');
+INSERT INTO item_type (name) VALUES ('Mandelpålegg');
+INSERT INTO item_type (name) VALUES ('Mandler');
+INSERT INTO item_type (name) VALUES ('Mango');
+INSERT INTO item_type (name) VALUES ('Mangold');
+INSERT INTO item_type (name) VALUES ('Mangosalsa');
+INSERT INTO item_type (name) VALUES ('Marengs');
+INSERT INTO item_type (name) VALUES ('Marengsbunn');
+INSERT INTO item_type (name) VALUES ('Margarin');
+INSERT INTO item_type (name) VALUES ('Margarin og smør');
+INSERT INTO item_type (name) VALUES ('Marsipan');
+INSERT INTO item_type (name) VALUES ('Marsipanbrød');
+INSERT INTO item_type (name) VALUES ('Marsipankake');
+INSERT INTO item_type (name) VALUES ('Mascarpone');
+INSERT INTO item_type (name) VALUES ('Matfett');
+INSERT INTO item_type (name) VALUES ('Matfløte');
+INSERT INTO item_type (name) VALUES ('Matlagingsfett');
+INSERT INTO item_type (name) VALUES ('Matlagingsprodukt');
+INSERT INTO item_type (name) VALUES ('Matolje');
+INSERT INTO item_type (name) VALUES ('Mazarin');
+INSERT INTO item_type (name) VALUES ('Medisterdeig');
+INSERT INTO item_type (name) VALUES ('Medisterkaker');
+INSERT INTO item_type (name) VALUES ('Medisterpølse');
+INSERT INTO item_type (name) VALUES ('Mel');
+INSERT INTO item_type (name) VALUES ('Melis');
+INSERT INTO item_type (name) VALUES ('Melisglasur');
+INSERT INTO item_type (name) VALUES ('Melk');
+INSERT INTO item_type (name) VALUES ('Melkepålegg');
+INSERT INTO item_type (name) VALUES ('Melk og melkebasert drikke');
+INSERT INTO item_type (name) VALUES ('Melk og melkeprodukter');
+INSERT INTO item_type (name) VALUES ('Merian');
+INSERT INTO item_type (name) VALUES ('Meterbønner');
+INSERT INTO item_type (name) VALUES ('Milkshake');
+INSERT INTO item_type (name) VALUES ('Mineralsalt');
+INSERT INTO item_type (name) VALUES ('Mineralvann');
+INSERT INTO item_type (name) VALUES ('Minestronesuppe');
+INSERT INTO item_type (name) VALUES ('Miso');
+INSERT INTO item_type (name) VALUES ('Moreller');
+INSERT INTO item_type (name) VALUES ('Mørkt øl');
+INSERT INTO item_type (name) VALUES ('Mor Monsen');
+INSERT INTO item_type (name) VALUES ('Morrpølse');
+INSERT INTO item_type (name) VALUES ('Morsmelkerstatning');
+INSERT INTO item_type (name) VALUES ('Moussaka');
+INSERT INTO item_type (name) VALUES ('Mozzarella');
+INSERT INTO item_type (name) VALUES ('Muffins');
+INSERT INTO item_type (name) VALUES ('Multekrem');
+INSERT INTO item_type (name) VALUES ('Multer');
+INSERT INTO item_type (name) VALUES ('Multesyltetøy');
+INSERT INTO item_type (name) VALUES ('Multi Vitaminmikstur');
+INSERT INTO item_type (name) VALUES ('Mungbønner');
+INSERT INTO item_type (name) VALUES ('Muskat');
+INSERT INTO item_type (name) VALUES ('Müslibar');
+INSERT INTO item_type (name) VALUES ('Napoleonskake');
+INSERT INTO item_type (name) VALUES ('Nashi');
+INSERT INTO item_type (name) VALUES ('Natron');
+INSERT INTO item_type (name) VALUES ('Nektarin');
+INSERT INTO item_type (name) VALUES ('Nellik');
+INSERT INTO item_type (name) VALUES ('Neper');
+INSERT INTO item_type (name) VALUES ('Nøkkelost');
+INSERT INTO item_type (name) VALUES ('Nori');
+INSERT INTO item_type (name) VALUES ('Normanna');
+INSERT INTO item_type (name) VALUES ('Norvegia');
+INSERT INTO item_type (name) VALUES ('Norzola');
+INSERT INTO item_type (name) VALUES ('Nøtteblanding');
+INSERT INTO item_type (name) VALUES ('Nøttebunn');
+INSERT INTO item_type (name) VALUES ('Nøttekake');
+INSERT INTO item_type (name) VALUES ('Nøttepålegg');
+INSERT INTO item_type (name) VALUES ('Nøtter');
+INSERT INTO item_type (name) VALUES ('Nøttestek');
+INSERT INTO item_type (name) VALUES ('Nudler');
+INSERT INTO item_type (name) VALUES ('Nudler av ris');
+INSERT INTO item_type (name) VALUES ('Nype');
+INSERT INTO item_type (name) VALUES ('Nypesuppe');
+INSERT INTO item_type (name) VALUES ('Nypesyltetøy');
+INSERT INTO item_type (name) VALUES ('Okra');
+INSERT INTO item_type (name) VALUES ('Okserull');
+INSERT INTO item_type (name) VALUES ('Øl');
+INSERT INTO item_type (name) VALUES ('Oliven');
+INSERT INTO item_type (name) VALUES ('Olivenolje');
+INSERT INTO item_type (name) VALUES ('Omelett');
+INSERT INTO item_type (name) VALUES ('Oregano');
+INSERT INTO item_type (name) VALUES ('Oreokake');
+INSERT INTO item_type (name) VALUES ('Ørret');
+INSERT INTO item_type (name) VALUES ('Ost');
+INSERT INTO item_type (name) VALUES ('Østavind');
+INSERT INTO item_type (name) VALUES ('Ostegrill');
+INSERT INTO item_type (name) VALUES ('Ostekake');
+INSERT INTO item_type (name) VALUES ('Ostepop');
+INSERT INTO item_type (name) VALUES ('Østers');
+INSERT INTO item_type (name) VALUES ('Østerssopp');
+INSERT INTO item_type (name) VALUES ('Pære');
+INSERT INTO item_type (name) VALUES ('Pai');
+INSERT INTO item_type (name) VALUES ('Pak-choi');
+INSERT INTO item_type (name) VALUES ('Palmeolje');
+INSERT INTO item_type (name) VALUES ('Paneer');
+INSERT INTO item_type (name) VALUES ('Panetter');
+INSERT INTO item_type (name) VALUES ('Pangasius');
+INSERT INTO item_type (name) VALUES ('Panna cotta');
+INSERT INTO item_type (name) VALUES ('Pannekaker');
+INSERT INTO item_type (name) VALUES ('Papaya');
+INSERT INTO item_type (name) VALUES ('Paprika');
+INSERT INTO item_type (name) VALUES ('Paprika- og kikertpålegg');
+INSERT INTO item_type (name) VALUES ('Paprikapulver');
+INSERT INTO item_type (name) VALUES ('Paradisepler');
+INSERT INTO item_type (name) VALUES ('Paranøtter');
+INSERT INTO item_type (name) VALUES ('Parmesan');
+INSERT INTO item_type (name) VALUES ('Pasjonsfrukt');
+INSERT INTO item_type (name) VALUES ('Pasjonsfruktjuice');
+INSERT INTO item_type (name) VALUES ('Pasta');
+INSERT INTO item_type (name) VALUES ('Pasta bolognese');
+INSERT INTO item_type (name) VALUES ('Pasta med kalkun');
+INSERT INTO item_type (name) VALUES ('Pasta med kjøttsaus');
+INSERT INTO item_type (name) VALUES ('Pastiller');
+INSERT INTO item_type (name) VALUES ('Pastinakk');
+INSERT INTO item_type (name) VALUES ('Pavlova');
+INSERT INTO item_type (name) VALUES ('Peanøtter');
+INSERT INTO item_type (name) VALUES ('Peanøttolje');
+INSERT INTO item_type (name) VALUES ('Peanøttsmør');
+INSERT INTO item_type (name) VALUES ('Pekannøtter');
+INSERT INTO item_type (name) VALUES ('Pepper');
+INSERT INTO item_type (name) VALUES ('Pepperkaker');
+INSERT INTO item_type (name) VALUES ('Peppernøtter');
+INSERT INTO item_type (name) VALUES ('Pepperoni');
+INSERT INTO item_type (name) VALUES ('Pepperrot');
+INSERT INTO item_type (name) VALUES ('Perlebygg');
+INSERT INTO item_type (name) VALUES ('Perlespelt');
+INSERT INTO item_type (name) VALUES ('Persille');
+INSERT INTO item_type (name) VALUES ('Persillerot');
+INSERT INTO item_type (name) VALUES ('Pesto');
+INSERT INTO item_type (name) VALUES ('Physalis');
+INSERT INTO item_type (name) VALUES ('Pigghå');
+INSERT INTO item_type (name) VALUES ('Piggvar');
+INSERT INTO item_type (name) VALUES ('Pils');
+INSERT INTO item_type (name) VALUES ('Pinjekjerner');
+INSERT INTO item_type (name) VALUES ('Pinnekjøtt');
+INSERT INTO item_type (name) VALUES ('Pistasjnøtter');
+INSERT INTO item_type (name) VALUES ('Pitabrød');
+INSERT INTO item_type (name) VALUES ('Pizza');
+INSERT INTO item_type (name) VALUES ('Pizzabunn');
+INSERT INTO item_type (name) VALUES ('Pizzafyllbasis');
+INSERT INTO item_type (name) VALUES ('Pizzaost');
+INSERT INTO item_type (name) VALUES ('Pizzasnurrer');
+INSERT INTO item_type (name) VALUES ('Plantebasert burger');
+INSERT INTO item_type (name) VALUES ('Plantebasert deig');
+INSERT INTO item_type (name) VALUES ('Plantebaserte boller');
+INSERT INTO item_type (name) VALUES ('Plantebaserte middagsboller');
+INSERT INTO item_type (name) VALUES ('Plantebasert grillpølse');
+INSERT INTO item_type (name) VALUES ('Plantebasert middagsdeig');
+INSERT INTO item_type (name) VALUES ('Plantebasert pølse');
+INSERT INTO item_type (name) VALUES ('Plantebasert produkt');
+INSERT INTO item_type (name) VALUES ('Plantebasert schnitzel');
+INSERT INTO item_type (name) VALUES ('Plomme');
+INSERT INTO item_type (name) VALUES ('Plommesyltetøy');
+INSERT INTO item_type (name) VALUES ('Polarbrød');
+INSERT INTO item_type (name) VALUES ('Pølsebrød');
+INSERT INTO item_type (name) VALUES ('Pølser');
+INSERT INTO item_type (name) VALUES ('Pomelo');
+INSERT INTO item_type (name) VALUES ('Pommes frites');
+INSERT INTO item_type (name) VALUES ('Popcorn');
+INSERT INTO item_type (name) VALUES ('Portobellosopp');
+INSERT INTO item_type (name) VALUES ('Port Salut');
+INSERT INTO item_type (name) VALUES ('Potet');
+INSERT INTO item_type (name) VALUES ('Potetchips');
+INSERT INTO item_type (name) VALUES ('Poteter  ');
+INSERT INTO item_type (name) VALUES ('Potetlompe');
+INSERT INTO item_type (name) VALUES ('Potetmel');
+INSERT INTO item_type (name) VALUES ('Potetmos');
+INSERT INTO item_type (name) VALUES ('Potetmospulver');
+INSERT INTO item_type (name) VALUES ('Potet- og purreløksuppe');
+INSERT INTO item_type (name) VALUES ('Potetsalat');
+INSERT INTO item_type (name) VALUES ('Potetskruer');
+INSERT INTO item_type (name) VALUES ('Prim');
+INSERT INTO item_type (name) VALUES ('Produkter av frukt og bær');
+INSERT INTO item_type (name) VALUES ('Psylliumfrø');
+INSERT INTO item_type (name) VALUES ('Pudding');
+INSERT INTO item_type (name) VALUES ('Puffet havre');
+INSERT INTO item_type (name) VALUES ('Puffet hvete');
+INSERT INTO item_type (name) VALUES ('Puffet ris');
+INSERT INTO item_type (name) VALUES ('Pultost');
+INSERT INTO item_type (name) VALUES ('Pulver');
+INSERT INTO item_type (name) VALUES ('Pumpernikkel');
+INSERT INTO item_type (name) VALUES ('Purre');
+INSERT INTO item_type (name) VALUES ('Purreløk');
+INSERT INTO item_type (name) VALUES ('Pytt i panne');
+INSERT INTO item_type (name) VALUES ('Quinoa');
+INSERT INTO item_type (name) VALUES ('Rabarbra');
+INSERT INTO item_type (name) VALUES ('Rabarbragrøt');
+INSERT INTO item_type (name) VALUES ('Rabarbrasuppe');
+INSERT INTO item_type (name) VALUES ('Rabarbrasyltetøy');
+INSERT INTO item_type (name) VALUES ('Raclette');
+INSERT INTO item_type (name) VALUES ('Radicchio rosso');
+INSERT INTO item_type (name) VALUES ('RÃ¥dyr');
+INSERT INTO item_type (name) VALUES ('Rambutan');
+INSERT INTO item_type (name) VALUES ('Rapidsalat');
+INSERT INTO item_type (name) VALUES ('Rapsolje');
+INSERT INTO item_type (name) VALUES ('Reddik');
+INSERT INTO item_type (name) VALUES ('Reinsdyr');
+INSERT INTO item_type (name) VALUES ('Reinsdyrkaker');
+INSERT INTO item_type (name) VALUES ('Reinsdyrpølse');
+INSERT INTO item_type (name) VALUES ('Reinsdyrskav');
+INSERT INTO item_type (name) VALUES ('Reker');
+INSERT INTO item_type (name) VALUES ('Rekesalat');
+INSERT INTO item_type (name) VALUES ('Remulade');
+INSERT INTO item_type (name) VALUES ('Retter med fisk');
+INSERT INTO item_type (name) VALUES ('Retter med fjørfe og kjøtt');
+INSERT INTO item_type (name) VALUES ('Ribberull');
+INSERT INTO item_type (name) VALUES ('Ricotta');
+INSERT INTO item_type (name) VALUES ('Ridderost');
+INSERT INTO item_type (name) VALUES ('Rips');
+INSERT INTO item_type (name) VALUES ('Ris');
+INSERT INTO item_type (name) VALUES ('Risbasert drikke');
+INSERT INTO item_type (name) VALUES ('Risboller');
+INSERT INTO item_type (name) VALUES ('Risgrøt');
+INSERT INTO item_type (name) VALUES ('Riskaker');
+INSERT INTO item_type (name) VALUES ('Riskrem');
+INSERT INTO item_type (name) VALUES ('Rislunsj med jordbær');
+INSERT INTO item_type (name) VALUES ('Rismel');
+INSERT INTO item_type (name) VALUES ('Roastbiff');
+INSERT INTO item_type (name) VALUES ('Rødbete');
+INSERT INTO item_type (name) VALUES ('Rødbeter');
+INSERT INTO item_type (name) VALUES ('Rødbetsalat');
+INSERT INTO item_type (name) VALUES ('Røde bønner');
+INSERT INTO item_type (name) VALUES ('Rødkål');
+INSERT INTO item_type (name) VALUES ('Rødspette');
+INSERT INTO item_type (name) VALUES ('Rødvin');
+INSERT INTO item_type (name) VALUES ('Rogn');
+INSERT INTO item_type (name) VALUES ('Rognebær');
+INSERT INTO item_type (name) VALUES ('Rognleverpostei');
+INSERT INTO item_type (name) VALUES ('Romanosalat');
+INSERT INTO item_type (name) VALUES ('Rømmedressing');
+INSERT INTO item_type (name) VALUES ('Rømmegrøt');
+INSERT INTO item_type (name) VALUES ('Roquefort');
+INSERT INTO item_type (name) VALUES ('Rosenkål');
+INSERT INTO item_type (name) VALUES ('Rosinbolle');
+INSERT INTO item_type (name) VALUES ('Rosiner');
+INSERT INTO item_type (name) VALUES ('Rosmarin');
+INSERT INTO item_type (name) VALUES ('Røye');
+INSERT INTO item_type (name) VALUES ('Ruccolasalat');
+INSERT INTO item_type (name) VALUES ('Rugbrød');
+INSERT INTO item_type (name) VALUES ('Rugmel');
+INSERT INTO item_type (name) VALUES ('Rullekake');
+INSERT INTO item_type (name) VALUES ('Rundstykke');
+INSERT INTO item_type (name) VALUES ('Rundstykker');
+INSERT INTO item_type (name) VALUES ('Rype');
+INSERT INTO item_type (name) VALUES ('Safran');
+INSERT INTO item_type (name) VALUES ('Saft');
+INSERT INTO item_type (name) VALUES ('Saftis');
+INSERT INTO item_type (name) VALUES ('Salami');
+INSERT INTO item_type (name) VALUES ('Salat');
+INSERT INTO item_type (name) VALUES ('Salatdressing');
+INSERT INTO item_type (name) VALUES ('Salat nicoise');
+INSERT INTO item_type (name) VALUES ('Salsiccia');
+INSERT INTO item_type (name) VALUES ('Salt');
+INSERT INTO item_type (name) VALUES ('Saltstenger');
+INSERT INTO item_type (name) VALUES ('Sanasol');
+INSERT INTO item_type (name) VALUES ('Sandefjordsmør');
+INSERT INTO item_type (name) VALUES ('Sandkake');
+INSERT INTO item_type (name) VALUES ('Sarah Bernhard-kake');
+INSERT INTO item_type (name) VALUES ('Sashimi');
+INSERT INTO item_type (name) VALUES ('Sau');
+INSERT INTO item_type (name) VALUES ('Scones');
+INSERT INTO item_type (name) VALUES ('Sei');
+INSERT INTO item_type (name) VALUES ('Seibiff');
+INSERT INTO item_type (name) VALUES ('Seilaks');
+INSERT INTO item_type (name) VALUES ('Seitan');
+INSERT INTO item_type (name) VALUES ('Selbu blå');
+INSERT INTO item_type (name) VALUES ('Sellerirot');
+INSERT INTO item_type (name) VALUES ('Semulegrøt');
+INSERT INTO item_type (name) VALUES ('Semulegryn');
+INSERT INTO item_type (name) VALUES ('Sennep');
+INSERT INTO item_type (name) VALUES ('Sennepsfrø');
+INSERT INTO item_type (name) VALUES ('Sennepssaus');
+INSERT INTO item_type (name) VALUES ('Serinakaker');
+INSERT INTO item_type (name) VALUES ('Servelat');
+INSERT INTO item_type (name) VALUES ('Sesamfrø');
+INSERT INTO item_type (name) VALUES ('Sesamolje');
+INSERT INTO item_type (name) VALUES ('Sesampostei/-pasta');
+INSERT INTO item_type (name) VALUES ('Seterrømme');
+INSERT INTO item_type (name) VALUES ('Sharon');
+INSERT INTO item_type (name) VALUES ('Shiitakesopp');
+INSERT INTO item_type (name) VALUES ('Sik');
+INSERT INTO item_type (name) VALUES ('Sikorisalat');
+INSERT INTO item_type (name) VALUES ('Sild');
+INSERT INTO item_type (name) VALUES ('Sildesalat');
+INSERT INTO item_type (name) VALUES ('Sirup');
+INSERT INTO item_type (name) VALUES ('Sirupskake');
+INSERT INTO item_type (name) VALUES ('Sirupssnipper');
+INSERT INTO item_type (name) VALUES ('Sitron');
+INSERT INTO item_type (name) VALUES ('Sitronfromasj');
+INSERT INTO item_type (name) VALUES ('Sitronsaft');
+INSERT INTO item_type (name) VALUES ('Sitronskall');
+INSERT INTO item_type (name) VALUES ('Sitronterte');
+INSERT INTO item_type (name) VALUES ('Sjalottløk');
+INSERT INTO item_type (name) VALUES ('Sjampinjong');
+INSERT INTO item_type (name) VALUES ('Sjokolade');
+INSERT INTO item_type (name) VALUES ('Sjokoladedrikk');
+INSERT INTO item_type (name) VALUES ('Sjokoladefondant');
+INSERT INTO item_type (name) VALUES ('Sjokoladeglasur');
+INSERT INTO item_type (name) VALUES ('Sjokoladekake');
+INSERT INTO item_type (name) VALUES ('Sjokolademelk');
+INSERT INTO item_type (name) VALUES ('Sjokolademousse');
+INSERT INTO item_type (name) VALUES ('Sjokolade og andre søtsaker');
+INSERT INTO item_type (name) VALUES ('Sjokoladepålegg');
+INSERT INTO item_type (name) VALUES ('Sjokoladepudding');
+INSERT INTO item_type (name) VALUES ('Sjokoladepulver');
+INSERT INTO item_type (name) VALUES ('Sjokoladesaus');
+INSERT INTO item_type (name) VALUES ('Sjøtunge');
+INSERT INTO item_type (name) VALUES ('Sjysaus');
+INSERT INTO item_type (name) VALUES ('Skagenrøre');
+INSERT INTO item_type (name) VALUES ('Skalldyr');
+INSERT INTO item_type (name) VALUES ('Skate');
+INSERT INTO item_type (name) VALUES ('Skinkerull');
+INSERT INTO item_type (name) VALUES ('Skolebrød');
+INSERT INTO item_type (name) VALUES ('Skonrokk');
+INSERT INTO item_type (name) VALUES ('Skorsonnerot');
+INSERT INTO item_type (name) VALUES ('Skumgodt');
+INSERT INTO item_type (name) VALUES ('Skummet melk');
+INSERT INTO item_type (name) VALUES ('Skyr');
+INSERT INTO item_type (name) VALUES ('Smågodt');
+INSERT INTO item_type (name) VALUES ('Småkaker');
+INSERT INTO item_type (name) VALUES ('Smoothie');
+INSERT INTO item_type (name) VALUES ('Smør');
+INSERT INTO item_type (name) VALUES ('Smørkrem');
+INSERT INTO item_type (name) VALUES ('Smuldrepai');
+INSERT INTO item_type (name) VALUES ('Smultringer');
+INSERT INTO item_type (name) VALUES ('Snacks');
+INSERT INTO item_type (name) VALUES ('Snegler');
+INSERT INTO item_type (name) VALUES ('Snickerskake');
+INSERT INTO item_type (name) VALUES ('Sodd');
+INSERT INTO item_type (name) VALUES ('Solbær');
+INSERT INTO item_type (name) VALUES ('Solbærsaft');
+INSERT INTO item_type (name) VALUES ('Solbærsirup');
+INSERT INTO item_type (name) VALUES ('Solbærsyltetøy');
+INSERT INTO item_type (name) VALUES ('Solsikkefrø');
+INSERT INTO item_type (name) VALUES ('Solsikkeolje');
+INSERT INTO item_type (name) VALUES ('Sopprotein');
+INSERT INTO item_type (name) VALUES ('Sorbet');
+INSERT INTO item_type (name) VALUES ('Sorghum');
+INSERT INTO item_type (name) VALUES ('Sosisser');
+INSERT INTO item_type (name) VALUES ('Søt gjærbakst');
+INSERT INTO item_type (name) VALUES ('Søtpotet');
+INSERT INTO item_type (name) VALUES ('Søtpotetsuppe');
+INSERT INTO item_type (name) VALUES ('Soyabasert drikke');
+INSERT INTO item_type (name) VALUES ('Soyabønner');
+INSERT INTO item_type (name) VALUES ('Soyamel');
+INSERT INTO item_type (name) VALUES ('Soyaolje');
+INSERT INTO item_type (name) VALUES ('Soyapølse');
+INSERT INTO item_type (name) VALUES ('Soyaprotein');
+INSERT INTO item_type (name) VALUES ('Soyasaus');
+INSERT INTO item_type (name) VALUES ('Spedbarnsmat');
+INSERT INTO item_type (name) VALUES ('Spekesild');
+INSERT INTO item_type (name) VALUES ('Spekeskinke');
+INSERT INTO item_type (name) VALUES ('Speltmel');
+INSERT INTO item_type (name) VALUES ('Spinat');
+INSERT INTO item_type (name) VALUES ('Spinatsuppe');
+INSERT INTO item_type (name) VALUES ('Spisskål');
+INSERT INTO item_type (name) VALUES ('Squash');
+INSERT INTO item_type (name) VALUES ('Squashfrø');
+INSERT INTO item_type (name) VALUES ('Stabburpølse');
+INSERT INTO item_type (name) VALUES ('Stangselleri');
+INSERT INTO item_type (name) VALUES ('Steinbit');
+INSERT INTO item_type (name) VALUES ('Steinsopp');
+INSERT INTO item_type (name) VALUES ('Sterkøl');
+INSERT INTO item_type (name) VALUES ('Sterkvin');
+INSERT INTO item_type (name) VALUES ('Stikkelsbær');
+INSERT INTO item_type (name) VALUES ('Stilton');
+INSERT INTO item_type (name) VALUES ('Storfe');
+INSERT INTO item_type (name) VALUES ('Strandsnegle');
+INSERT INTO item_type (name) VALUES ('Sukker');
+INSERT INTO item_type (name) VALUES ('Sukkerbrød');
+INSERT INTO item_type (name) VALUES ('Sukkererter');
+INSERT INTO item_type (name) VALUES ('Sukker og søte produkter');
+INSERT INTO item_type (name) VALUES ('Sukkertøy');
+INSERT INTO item_type (name) VALUES ('Suksessterte');
+INSERT INTO item_type (name) VALUES ('Supper');
+INSERT INTO item_type (name) VALUES ('Surimi');
+INSERT INTO item_type (name) VALUES ('Surkål');
+INSERT INTO item_type (name) VALUES ('Sushi');
+INSERT INTO item_type (name) VALUES ('Svarte bønner');
+INSERT INTO item_type (name) VALUES ('Svartøyebønner');
+INSERT INTO item_type (name) VALUES ('Sveitserost');
+INSERT INTO item_type (name) VALUES ('Sveler');
+INSERT INTO item_type (name) VALUES ('Svin');
+INSERT INTO item_type (name) VALUES ('Svinekam');
+INSERT INTO item_type (name) VALUES ('Svinestek med surkål og poteter');
+INSERT INTO item_type (name) VALUES ('Svisker');
+INSERT INTO item_type (name) VALUES ('Sylte');
+INSERT INTO item_type (name) VALUES ('Syltetøy');
+INSERT INTO item_type (name) VALUES ('Syrnet');
+INSERT INTO item_type (name) VALUES ('Syrnet havreprodukt til matlaging');
+INSERT INTO item_type (name) VALUES ('Syrnet melk');
+INSERT INTO item_type (name) VALUES ('Taco kryddermix');
+INSERT INTO item_type (name) VALUES ('Taco med skjell');
+INSERT INTO item_type (name) VALUES ('Taco med tortilla');
+INSERT INTO item_type (name) VALUES ('Tacosaus');
+INSERT INTO item_type (name) VALUES ('Tacoskjell');
+INSERT INTO item_type (name) VALUES ('Tacosuppe');
+INSERT INTO item_type (name) VALUES ('Taffelost');
+INSERT INTO item_type (name) VALUES ('Tamarind');
+INSERT INTO item_type (name) VALUES ('Te');
+INSERT INTO item_type (name) VALUES ('Tebriks');
+INSERT INTO item_type (name) VALUES ('Teffmel');
+INSERT INTO item_type (name) VALUES ('Tempeh');
+INSERT INTO item_type (name) VALUES ('Teriyakisaus');
+INSERT INTO item_type (name) VALUES ('Terte');
+INSERT INTO item_type (name) VALUES ('Tilskuddsblanding');
+INSERT INTO item_type (name) VALUES ('Tilslørte bondepiker');
+INSERT INTO item_type (name) VALUES ('Timian');
+INSERT INTO item_type (name) VALUES ('Tindved');
+INSERT INTO item_type (name) VALUES ('Tofu');
+INSERT INTO item_type (name) VALUES ('Tomat');
+INSERT INTO item_type (name) VALUES ('Tomatbønner');
+INSERT INTO item_type (name) VALUES ('Tomater');
+INSERT INTO item_type (name) VALUES ('Tomatjuice');
+INSERT INTO item_type (name) VALUES ('Tomatpuré');
+INSERT INTO item_type (name) VALUES ('Tomatsalsa');
+INSERT INTO item_type (name) VALUES ('Tomatsuppe');
+INSERT INTO item_type (name) VALUES ('Tørrfisk');
+INSERT INTO item_type (name) VALUES ('Torsk');
+INSERT INTO item_type (name) VALUES ('Tortilla');
+INSERT INTO item_type (name) VALUES ('Tortillachips');
+INSERT INTO item_type (name) VALUES ('Traktkantarell');
+INSERT INTO item_type (name) VALUES ('Tran');
+INSERT INTO item_type (name) VALUES ('Tranebær');
+INSERT INTO item_type (name) VALUES ('Tranebærjuice');
+INSERT INTO item_type (name) VALUES ('Trollkrem');
+INSERT INTO item_type (name) VALUES ('Tropisk juice');
+INSERT INTO item_type (name) VALUES ('Tunfisk');
+INSERT INTO item_type (name) VALUES ('Tyggegummi');
+INSERT INTO item_type (name) VALUES ('Tykklefse');
+INSERT INTO item_type (name) VALUES ('Tyttebær');
+INSERT INTO item_type (name) VALUES ('Tyttebærsyltetøy');
+INSERT INTO item_type (name) VALUES ('Tzatziki');
+INSERT INTO item_type (name) VALUES ('Uer');
+INSERT INTO item_type (name) VALUES ('Urter og krydder');
+INSERT INTO item_type (name) VALUES ('Urtesalt');
+INSERT INTO item_type (name) VALUES ('Vafler');
+INSERT INTO item_type (name) VALUES ('Valmuefrø');
+INSERT INTO item_type (name) VALUES ('Valnøtter');
+INSERT INTO item_type (name) VALUES ('Valnøttolje');
+INSERT INTO item_type (name) VALUES ('Vaniljekrem');
+INSERT INTO item_type (name) VALUES ('Vaniljesaus');
+INSERT INTO item_type (name) VALUES ('Vaniljesukker');
+INSERT INTO item_type (name) VALUES ('Vann');
+INSERT INTO item_type (name) VALUES ('Vannbakkels');
+INSERT INTO item_type (name) VALUES ('Vannkastanje');
+INSERT INTO item_type (name) VALUES ('Vannkastanjer');
+INSERT INTO item_type (name) VALUES ('Vannmelon');
+INSERT INTO item_type (name) VALUES ('Vårløk');
+INSERT INTO item_type (name) VALUES ('Vegetabilsk postei');
+INSERT INTO item_type (name) VALUES ('Vegetarburger');
+INSERT INTO item_type (name) VALUES ('Vegetarlasagne');
+INSERT INTO item_type (name) VALUES ('Vegetarprodukter og retter');
+INSERT INTO item_type (name) VALUES ('Villsvin');
+INSERT INTO item_type (name) VALUES ('Viltsaus');
+INSERT INTO item_type (name) VALUES ('Vin');
+INSERT INTO item_type (name) VALUES ('Vitaminbjørner');
+INSERT INTO item_type (name) VALUES ('Vitamineral');
+INSERT INTO item_type (name) VALUES ('Vita Optimal olje');
+INSERT INTO item_type (name) VALUES ('Vørterkake');
+INSERT INTO item_type (name) VALUES ('Vørterøl');
+INSERT INTO item_type (name) VALUES ('Waldorfsalat');
+INSERT INTO item_type (name) VALUES ('Wasabirot');
+INSERT INTO item_type (name) VALUES ('Wienerbrød');
+INSERT INTO item_type (name) VALUES ('Wienerkringle');
+INSERT INTO item_type (name) VALUES ('Wienerpølse');
+INSERT INTO item_type (name) VALUES ('Wienersnitzel');
+INSERT INTO item_type (name) VALUES ('Wokblanding');
+INSERT INTO item_type (name) VALUES ('Wonton-ark');
+INSERT INTO item_type (name) VALUES ('Wraps');
+INSERT INTO item_type (name) VALUES ('Yams');
+INSERT INTO item_type (name) VALUES ('Yoghurt');
+COMMIT;
diff --git a/api/target/classes/no/freshify/api/FreshifyApiApplication.class b/api/target/classes/no/freshify/api/FreshifyApiApplication.class
new file mode 100644
index 0000000000000000000000000000000000000000..a0639593ac9717d28efae1bb088474923516bf54
GIT binary patch
literal 752
zcma)4O>fgc5Ph2_b(#iRQYe(dfeT7=U~jzyDwRk*nGX>Z4xHBR#+l;mTI+RzpT!Bp
zfgiw+Ld=>-^}z=$c}DZ~X7<he{`2z}fERc?KnGh9x<mA^EwF#3u9eJ{$>f{lN~d06
z`#Bl%X98Q}lSPESz*A%8(&=(V%db)uBri6`c|qqzkyENXSu?-@yAg&%+`?^viFKJQ
z3r8kfI<?lHt@|VsYrUM;&PFBoa+MKC#_`QOvs{(s^kc&__W^8r61O3z)_DEJ%b7Jx
z$||RlTsK;<JA|hK-I=}A0(&tT{kmEw+Px3C0;AZbDqko^!QME#enq9gIQ~Bl0{&VN
zzvXb;Hu{3&%4Ljr&=Tf-ywZMUFW;)bnAeUI2XkAwR9{e-@wlD(XMr|>qj#0@wAKqM
zDLmg8>+97p%vmdI^*&VPEz?)irZ?Mp$%|^xH^mb~d^+LlK!oFAxyP1dEm-#^-yy!$
z;eD1N3@*9Da`-O+BOI``gS)uLAffoQ1_Sz|Xz~L)A8zWyoq`W4!fpejk3-yN{{#Me
S%rUDDj%xW3$E-u!N5EevFT|(-

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/GlobalExceptionHandler.class b/api/target/classes/no/freshify/api/GlobalExceptionHandler.class
new file mode 100644
index 0000000000000000000000000000000000000000..55dbe738e04f0baa0e833fe168ee8251b50008d2
GIT binary patch
literal 8260
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
Dh>O|2

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/controller/HouseholdController.class b/api/target/classes/no/freshify/api/controller/HouseholdController.class
new file mode 100644
index 0000000000000000000000000000000000000000..b948f84210de68555f4971e8d2a950038e7bba6c
GIT binary patch
literal 6830
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
QPkw4RHo%L7f6cD`A1Ep*H~;_u

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/controller/HouseholdMemberController.class b/api/target/classes/no/freshify/api/controller/HouseholdMemberController.class
new file mode 100644
index 0000000000000000000000000000000000000000..081a2af2aa91e7c698dcbe64b6394616b17ab21c
GIT binary patch
literal 7440
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
J5Frsp%ahOY>Z$+$

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/controller/InventoryController.class b/api/target/classes/no/freshify/api/controller/InventoryController.class
new file mode 100644
index 0000000000000000000000000000000000000000..61693615322d9f30b9e9b17d194209f01cfa834a
GIT binary patch
literal 10349
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

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/controller/ItemTypeController.class b/api/target/classes/no/freshify/api/controller/ItemTypeController.class
new file mode 100644
index 0000000000000000000000000000000000000000..0720536e74cd0726514696d4f047a2abd68ae9e8
GIT binary patch
literal 2490
zcmb7GjZzy`6#j1bSx8gCD5Y47DN_FFTE$u$inbJ5G(aUtZPDr`xd{uK-MD)L<xPAH
zosqWI86Uuha{TTlBq0eMn9Sz>?78Qh@7(X4v;Y40<{toek?BPQ9R@mM=t8%^tm~P1
zUj{pN{?N2awwd)@<$I1JeRD<0;^tvVF4ndLx*e}jkiI}X<@p6OaPo7zW-8oE#%ZA^
zhF(Mk28-67KA5%C6I<<Y7AVVAfxy^AYS-GgOviEyW?K2STS!i}Ze2hO7Y)1<Lm&DD
z`kSo@blPs-6BuZxZ%f0B$M7EB7l_&fvTBt|+V9C!GvcC`la5&o--nnhqDigdQVfH*
zEYPP_=vbtszi(${J3T?=RV{2)(PR`K;EI6{W4MZ8f$?Vhr<|kFKw5rw=lB{JyU})7
zE3qpp+c8siplC0FYX(MQ_!y&Y?45#F;G*)5Z9Ujr7Z|BptE;ZwQ+*?fF^n6Sh+z^_
zv=!b`N#AMSw~F$>^Y_dhrAp?83`*pHTymAI4h16Kp1|EkIO~~RnN_618Fdin3}y}7
zh{41sWJsM=6;&kbyzSa*L7-z|a?8M{0@KaGKP4C|#gY@nP0U8|Ic^#FB8J=elC*B7
z;j)!go=-r%1*s}|AaK1A*P>$u!7;4HbZNq0ONF!IX9g^iy5vd9cI8^Rn34Xbm2tSk
z<jh*mmgU=eUES<dJ2p9Fwj{t?Q$9&EF0WE6tw*@(EOTq=MOK!S&AT=5Kwz#p!1DNg
zEiZyKPc3_8H&;8#%UhLd$ICsoG;5Uf>1S`+F1VH|`!xNcF`(xS)O=Hd%(n!fLV}#~
zYCe+x$p!udhBnHiY*B96fz4Rnb6rnaAzp%Q%hdy!F*CNCGp(Ae`A{ldRdlUmUY%4~
z1ARjGtuyQ1kiV8?ph7j&J~PpR@01FYoZR9CroFPCmCLr~&ERqV*Gv8ledz+X&*4s>
z>c{EOd5(ri>XGW&x12Kl>NR!!Rjj|H%6-pMf%2_Vg)>24H@=Tz3r`IEpu5jg*2y|k
zZFk?>lhsB;zu1s!Is029t*U|*rH?E(=g43*<#~JMQnHo#4Lc_e>K@TXe7ixuR_I!s
zT(le~O{B>lY_p1_!}3qgB=Vl0&=E-J5Cn+>cGQGU$~y@m5L<Cw>4#-TG6|paWQ*o@
zs0{ofF#L8=*3e1_aE;w?h7G<0aorL*i|g*n5&BDl{}BjwxI3IDxq3#)2*;7BKOv^y
zzySWjg$THOm(RfTOANilN3U`H_wejI|D)lFF?RfMeyRYMDjKkWuehQve2sgwa-Z`~
zj*D30tV?hkSmqPKLp<Wx&6g`2zu{vDF23c2r4K2JXz!j^y&Il-h3Tokar5abe0D_7
z;*r;wJA#;+KEl8sl#D=o7N<QBbtkUSyQ`dCZt!rp=HYM{8*%K{Ao_V^HB_?}dKRa`
hb*>-No$t0G0&F17br08@e4gP)uA-d%gr8wy=znA{*F^vT

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/controller/ShoppingListController.class b/api/target/classes/no/freshify/api/controller/ShoppingListController.class
new file mode 100644
index 0000000000000000000000000000000000000000..b02a7dbdc17b45c17c49f344c6c87705b1a93e50
GIT binary patch
literal 9272
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

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/controller/UserController.class b/api/target/classes/no/freshify/api/controller/UserController.class
new file mode 100644
index 0000000000000000000000000000000000000000..bea9b32a04eb46d2549533d7b9f612a728323702
GIT binary patch
literal 11683
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

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/HouseholdMemberAlreadyExistsException.class b/api/target/classes/no/freshify/api/exception/HouseholdMemberAlreadyExistsException.class
new file mode 100644
index 0000000000000000000000000000000000000000..2ca7e4dadf51c51be2ede07e72bb722a4721daba
GIT binary patch
literal 623
zcmbu6&rTaL5XL`;kPRU~2?g2{;eZ4j@Tn3K&?<^RAZ<Y+D0e5BB!-Q>vc3FyEKW#0
z@Blni)!6`{2M$Qs^32%&#`Dwo>F=LM00;P1MnPch*k+!FHtE$zH0qG6tHhD&-PP$<
z``{}mVmd;piU?(arAu|KWTMPK9^Q5-4cZ!k(!Mr2{1jN;jNb&U;ItX+ZM7p*1b!JS
z`;Poj_wS@iwWQa4IYIb6CTKhZ9FFV%S7mB*t1VD$+8zlk#M;nlmJ?s7PQoX(*mhOY
zR!-;pm&0NhYA?`;KUsZGpwhCL>(Y_Vi*0|1c_(j%!1wda1U;g*_L|We#@L|p&N10;
zY~4WmG;dYksS({+cO`GABRkskq?%~uIr)@RsKvRNXQ1h8m1NAa@$M7D5K?)}W}+`Q
z&rXlxlja51F~i@Q55Y6SEZZvYexSe+5N+4Q1E%gdEMSgpg*`Z_#L+xQ)n^$N@MWx7
T9NQX}*w69ZS6<766|DXPqeQV#

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/HouseholdNotFoundException.class b/api/target/classes/no/freshify/api/exception/HouseholdNotFoundException.class
new file mode 100644
index 0000000000000000000000000000000000000000..198cc2b0837371a7415b3d51787c58f00b48b740
GIT binary patch
literal 579
zcmbVJ%T59@6g@>`0Ko_NT!{-4aA7xUOnf9pB`hY8fU-3O3RH)7GSfl*ELSEj`~W}7
zc*h62(2Z?+Up@EU)7zKVr)L01SWP3rP^_6Kltbh7O4`^`-$c5XMH15vQaLzC6XaTq
z1^0v=@bkN_^sO?QA$6#<vd0WdW%nD<vVqcrgG$>$mSIO5-VbCrRQ-D{e8uHgKA*I$
z8(WQ={wO_FuCy7Fr=}+v=3J#^JsNdna3MM#MGCIz3a>2!75ksTq#de|VbA?f%L9gN
z%S1s}R#n_#{cm>L@mm?znvu3@B-<)fMB+r#@I*Wq;;`?UV8BB^o<u(oBYA6r8-6Q0
zyrXoFiwTxDW$06iY*B6$5{v1v@FF6x`D=-xwLY(rnBX(@#>G{&aaljZ1~T+*@nW<c
z%#h5Hw~GW>fU{L#kC=KOGl4wGENM_uimX|(avw0vVg4Pn@Gc7|lFrlJBAq3PWvsjb
D0U@8N

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/IllegalItemParameterException.class b/api/target/classes/no/freshify/api/exception/IllegalItemParameterException.class
new file mode 100644
index 0000000000000000000000000000000000000000..ee0f978c0e7493d12b1261266b9610aea0534d48
GIT binary patch
literal 629
zcmbVK$xg#C5FM8;&{7JN^#~FYi-eDWSR|GrkOG3X^orbeni>*2avTbu#R-W6AHYW;
z#w-O1#DPQ^&zroNc^>=u<?#sswqYg@DHzB>dKfa0Wl+8nH-ZO3`Mh%5!pKUk7-YAk
zl6Hr|<f8XQs97VGzq!=N!61V*rFq9-+?Aa>E+WbCGoK#^0s101wiuoXBSN%jzEw}}
z>ozhdc~aqN5;oD)MKhqtxTjkpXb2-6{s^XRSH=uBynpuFWRMFnj)ni$;m39ujGmzF
z>ULi$b<5XuVp@18ovisk_p|CMGMKF<%E}NMGL|HMS1E0Un<iCT_q6eO9J%pz+&p^P
zT=O0_c~h!37kw_TVjNKl)+jfLNqXi+1PN(a__ajW+K3;K>GKPFy9bxm%K1g5R);yr
z(P_Jf(M#t|Xo%1btuCHjUU>j^PhJZ0WZm5WVr0lGkT><tf?+5UB0h{ji7JhfpJ4=C
U;@F!Vhcc~2`Z+=0BvS75D|(fyz5oCK

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/IllegalItemStatusException.class b/api/target/classes/no/freshify/api/exception/IllegalItemStatusException.class
new file mode 100644
index 0000000000000000000000000000000000000000..6e9bdf62ad29df00c995767d0328f952a077e5d6
GIT binary patch
literal 581
zcmbVJ%T59@6g}lNh#-pZmAEhw7j~n@1U2!2(PUyGAX`(QKy{`wndyLjmMaq%et;ik
zyo1k$Zfw(gZ`*V4IlX;(eR>A4kEJXU472BsBm2TBD<j=<XoQKv98ySI$mC%mOOP8e
z6x<QI&ue!b=^N!~hRmMQ${aAvuiM{%h6$AJS1T<GIfgCm@m?Uqf$H6J;VUjb^Z5tu
zIk7gzq(4e0*DEcC)Unr<3`JXMc@ep788k)Pp_7vBb%fIrfr|GZhbc2qA;XUSAId62
zuHi*NN1m#fVdZaioAFy2mg|u=%9Sk@DiU$1wMVa@#*l_x+Y9<U^y5zS0^!P$7u@oZ
zZ1c9#T`s<`ye>nZQsjFFNJV-moQMRh{aRvRjL*-=eBmdL4o|M@wacqoqlr~a(8tAt
z(X=p0Hcz{4Bq#!`jS_oA@`1tx3S@KSK}i{krYOq4!%)QZ7&9}rCCrj9(A^xZd5Hxq
Fz5yj~paTE^

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/InvalidHouseholdMemberRoleException.class b/api/target/classes/no/freshify/api/exception/InvalidHouseholdMemberRoleException.class
new file mode 100644
index 0000000000000000000000000000000000000000..353d508e271f6cb577987fd381d10b425ddd5b1c
GIT binary patch
literal 618
zcmbtRxlRKy5Pc3I3pqH#T_A-5DWSj>5)zj<f`YUlk%Y9!Nt~=<W3Rls9G^vnM8OB}
zQHa@a78FR>^2~Vr#_wt7<@M<qzz!D2kYZRq(Ko_Z-I8bGP<qDimIiXrmbPS#FSAHv
z)IlZ>2V)E~SK>x+U+6xs-gRUUDWe%O+e)iwmtn5#eghhjRl2`bX*tL;>}bP#R)(JH
z-E$ErE<fw}hk)8A|LKsvPV7H8M#_~IL;BEkCBvkvv^<Lwl}*w1DN}S!NBAvaRdWAG
zrXx><414asxVIRx4HMgrJXQ%+`44*6lQu9c)ngs0fo!Qzk*s~KO(c?@k*ZDC*gg+~
zq)9z12J+U}Ykn)+ysdPXi!Us%%P^o4*`V4uBsrrru$Yvr{`!R%MFFpo`NHQ8_Kz;>
z)$@yLqlp!a(@c}aXgkP}&C_iIDT)ARt;ilR@<3q<1+rQ4prQ;#6BOm&VVK0!5Hmfr
RMa+;d(AzAXIf;2Jya5^huA~3}

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/InvalidItemCountException.class b/api/target/classes/no/freshify/api/exception/InvalidItemCountException.class
new file mode 100644
index 0000000000000000000000000000000000000000..c1b379e39ad1a3c5342ad586c6100f34ac612d96
GIT binary patch
literal 615
zcmbV}QBPAb6vzJ^V;9E|8G`y^t`8=_1AQ<gB!CIxh$J^AZn#&|ZD-qot-Wb`hkh)c
zOnmSI@S%w3PDCH{#Wp=XZU5(-U)!78Z{GnN;pq}83j1evW+psHT~6Lac6K*Ci!@F9
zuCOr;6w~NZ>uj34z>#N^+G5%xUq=;-32F@_SW;NOFf*ek#*TFBbD#1ulS1u~Eyvdi
z8(Z0LK__~)ql4{kg1W*h>-5l581wLpHaTnh6|e8uN}iJv=a0+_TiacQ>WLeW!fM8r
z-p{elO>ZJQ&CK=9q-#8v>$}Zr9CJ|E%l@O{fkM6G3g4$wE(<*WC);j$QH5u10p=-n
zIj|rcTkGQdeT85@bAF^lUOvOnn<-s6f2psir+aJ%+T3e(n?mkvppL{AK_C|8w+gBM
z@~<hzG3NT6n0x*5o8z~i+N}>CTb*;fzytZUvMK2amc=$?wTFs$K(f<RU$Jm4ZUrl1
k>oP-vYT`W<ukllcRXmz&*5<Z}b(vS>?6Hgu!X}>l0Bvckf&c&j

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/ItemDoesNotBelongToHouseholdException.class b/api/target/classes/no/freshify/api/exception/ItemDoesNotBelongToHouseholdException.class
new file mode 100644
index 0000000000000000000000000000000000000000..685de29c37663c729289d4a41dbcd85193e5cb4f
GIT binary patch
literal 628
zcmbtR%T60H6g^HthKBHHc<+V<60pE4q)N0@p#*_6LTVDSMV{m)W0=^Z8Bd^})m0@H
zd;lL+^-fx#3l>P&@_qSS-=pKl-}esyzF=b(C4sGTM`M3rDf5kWen_!3Bi~s+vUx_4
zjR!SUFyo<Ghlg2#<!d!jGFE0JTX%g*oVG@w`dJ(8js#YBf)_x?rP_=RcY7Xc0$+`l
z!<4c}4}VCNXh~1~vLJE794@Roo-*j#v#0t0O)2l}_5>>5?0^Io18wLcABU87RTy)n
z5!k+pdn(mM{;ybZk<J8~!8@lP3e-9_Py2MLi(z|j;=EsoA+XubjniZ5=}a@VreUpB
zp&T>&6xehmv!sw}n5r?|+Vn==QYb@h22wp^Wt*~uTd2dmdB%ihCMwRE%l4~JM9wAh
zjLkEC?znk!)oy*iY<0TW!Uz7@VhP?J=GfLbJ3xsez}stxUnu|Nu!MQGHTK}9Dn|<(
b)&Ih<h@~m!<J2~=%zmElR`{$E*0BBu`DwBK

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/ItemNotFoundException.class b/api/target/classes/no/freshify/api/exception/ItemNotFoundException.class
new file mode 100644
index 0000000000000000000000000000000000000000..7bc6db4158ae379b207dc9e7c740bb5223b55c39
GIT binary patch
literal 559
zcmb7BO-}+b5Pbz?0YMbRuM-|j#Dk3o6BE?Ls6>+uB%)kRfdW-%H@jWXpXJHKgFnC@
zWt>Gt4_<83`Rbc_)9Ks$%PW8*tfdfRSh%!uRMy6pdnVM~3=)`gkj%nCilKNX#)1!p
z?(_49j`XZDnjv|pw6ezxrET{I(6qkN{c5G<Aj815;XPjl1J!%v!c$y+=ktiMZfq^$
z`&Bi*U1>2SPEA)b<Xxp@Jsh>Ae=XWWiWFSa5yO`7RpfsK6Lz2ihCTP6Y*mI#(}aFU
z)>Kq{<IkRUqsK9<UxnJLk!-0z5%r0tX^ChO#C+fyzt00NdV0?nBRMhtJ)g)nZ!6v9
zVus~cGVmxxHYqm@sDZh$7>2~X^=FBJwI079F~g_pjqBT5<EDOwO{D3cqQz)Cm?xPf
yZyzzT0B5Jbo)Lc{Glm?=3~5kOlB@-?vY#;Iu{gynO=ST^(mA?Yrc;tw!RiOQ1eYcN

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/ItemTypeNotFoundException.class b/api/target/classes/no/freshify/api/exception/ItemTypeNotFoundException.class
new file mode 100644
index 0000000000000000000000000000000000000000..392f2a0d0ec0b1bfb73c164e8d69fd5f63cf7cd2
GIT binary patch
literal 576
zcmbVJ%T59@6g}lNh#-pZjlqS9xUdUDV&Wq)D$!&D2_Re3fdW-%Co>(<&vIqr!VmDH
zjCXu5bYq*|SI@oY_V)SZ@d>~IR<cMi%%591F55d_mbJ0vzKL`%hZNEdGI==2668wU
z2tE>ez)x?x(znWJhRnXw${sQ-Zo1!qmJO61>{U7ratu4#@O~h}q3Yjp;VUjb^Lb3$
zCf2&KwV3lq<>Y3i!;m^QJ;_jXm6r8r?8%@lyb(o8uIY+VM+7SNKY}ScR3Ssv{RiV7
zL#}0_pet)CCRqEkx9#|$46DsZTQ!y)6)I}sNYms*JQeC-*EPX_hkiVUejvtjVuEWv
zkskMy?s4&j<xLs-lp<S{8->(F`bLZ*;@|kS#L!xwpON^&Pt_ak%Ua{2eu8yO(VxYO
z(RMIRGEZI=39<lZtHd6VyeBh(0?8a{P*R4h8M5;4FcdNShM9YlCCrm9(A@%^MTsRW
FzXG{+o&Nv;

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/ItemTypesNotFoundException.class b/api/target/classes/no/freshify/api/exception/ItemTypesNotFoundException.class
new file mode 100644
index 0000000000000000000000000000000000000000..9140baf4418295aa2dfbc40a435bfa7b743e5524
GIT binary patch
literal 591
zcmbVJOK%e~5dNIkhLBQ7ngS=bhoY7Pz5qh%Lqb&}5UU_HQSQ!Wl6A@2i`UzdpT(&X
z2YvuQs$w>M&_lUk%k%O#GoQ!5FMs|5aDZn`R0LiQY^Xh@p<iZ{hpF;$LetPE6y~H{
zoP^&Ba?2KKs0V1Y5uhp1JymB)E|i(e<L@zLURxv3*w;q;LxJ8-^cOJnPMi7O?l?e8
z;El0z<|t3}Y$;WyCEeu9PfTM}vKUz3w}qMBDP7&!9ShWs?34u7BW-9<q!V%@HCb?^
z6WLfT#>(l^zYf-XqH}?F(f_pE6KD->;bQ9RvcrpivwK~>Rp9waVZ2UhtaHsIJ{V)Y
zDhI<H-bdEWWuBFjm^qcwxpiOVIZfn5o2gW{Sb0Ku#wj%9+#+Wd^)t07n85bEB@*v5
z`H{sfzVhWWw(x-et6YM2fQKyG?7c;WEg*Q+5f`ZbV6%cXmMzxcqy}4$*lJ(Fu#U$o
U%#)Supv!uV?>6}K2%C8N2QLJqI{*Lx

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/ShoppingListEntryAlreadyExistsException.class b/api/target/classes/no/freshify/api/exception/ShoppingListEntryAlreadyExistsException.class
new file mode 100644
index 0000000000000000000000000000000000000000..b33c1fd3486ab502636078cf70da87df1dfafeae
GIT binary patch
literal 649
zcmbu6!A=`75Qcw;kWE7<5K2pL%b^mfDlASQQ7T1IP?1(tA}Dt!nPlB=?3L{W@>o4p
z>VXI7Lsgv(CFRfq61F@ZkN@#}8vpwJ^A5l%cI&7J9Q9M1=h{r;O#2X%32q*%%#j+;
zW4h&-kF|+IO0j>eY@mwO2(>06)CIP`s%s@PWu~%sJEA;jYXoW^wb9{|z|Ma1PtXsJ
z>z%X*5gGy=W97t=PxWLjRjwsH<jV)NgeiI@Sm&Orx4?Q-XJx-V5U6(Tm;^QwZRnzy
z4ar@pVaAbGVn-?)D5uNw-(WSQ+6#1(XV*UwX!LF2Ms%jjavz?^eNeVU;O%8$f}YVp
zd(C(qV{A}m|CsJLv2H4TUN&sv)QoPd`zCK_D2LjNrCMs`CHb6FsL#2DXQb6@l@(0$
z?!Ql@A>{Hio29<q{c>@ZoOiFVhZp?0<q$k0tg&tK=@1q6farZo{J_e0b}LwCTU&(d
ec*%bAUV;s5F7CG$wuNop*ZJ-huN}f`y!itw@x2@X

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/ShoppingListEntryNotFoundException.class b/api/target/classes/no/freshify/api/exception/ShoppingListEntryNotFoundException.class
new file mode 100644
index 0000000000000000000000000000000000000000..494ba2c7cffc3994c3933196a6f6bba3eee70a18
GIT binary patch
literal 654
zcmbu6OK%e~5Xb*c(`*`23Mu7rGY3S=p%yo!KBNj7A+$=RrsRs8WRf-A*elzcG#`r-
z5(hp29||!WLg9eK0b3r=)AQ5#+xIVD0i57*6E%T%XEJ22D2$!T+=M8}M!%E`6EitA
zbFwln3z7>Rq;*kFTxrMBus5T1Jac8B%;n=2>ex)sXd^*WVE3b*Yn5v|Rp&P&Dxz^#
zpmA)hiKha4`|0n5e)J4*bTCNJ5;(R_O+1CnOqNO)M$xZ&)nBuwjCx*?_FU{%On<c4
z*gqHu)L*+X3GAfCQm>p1$zSPV&Yn){Mmis8Zz_B3tjEj*fz$MVS|16t`mXdN>YA$4
z^MBJGRx=QIa#`AFW;8ItFw~jlS?g+G%=9XCeyT!IO=#lvj26ycs|5|!(Acrkx4G()
zLct}}=h`wb&E{O^C4)Ts>l0awg?h{4Hh-&karL2l@xJ#4PqD?{SuMdk!5x-uwqByf
v8j!r`h|k#g#A*%OEE_9#6L(o}|4hLS?ychYSF(d$zPCB{fX^P`As+nzg-E^X

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/UserDoesNotBelongToHouseholdException.class b/api/target/classes/no/freshify/api/exception/UserDoesNotBelongToHouseholdException.class
new file mode 100644
index 0000000000000000000000000000000000000000..ab6f66b66aaae0a5efa5ab0b6af5b343a26a33fd
GIT binary patch
literal 628
zcmbtR%T60H6g>_h10j?)Kxucwq7tyESCuN!f&!#sF+yq*vaLMHO~!O$k8BULpT!EP
zi+(^qs^U&~w2Lk(VaxaBbA6AFfBpXP6TnBjT0%`=``nX@$Ci9-Y=~3Jt(nHb#+fZW
zWi}r-QO9D0Mhg*^1lBLqrINWaQ`!ACq9SN(1R5W-(cwT~b0_%&=m)3Gbbogkp($`^
zteiOVnVx)?s?d@i`ejApggKnqa5QHyu%{36|C+L}vpW>1AKNhrtR>peSvgC|4OE(Q
zrJdN3%7@D7D!(t*L#DkzCwb!ZeSv1*mTp9!bTw@6zc|0G#1MGhD^1Wd8fveZTF0=~
zs#1=by-%#0N?%k`O`Mw1m33d`6{RxOW-QesR`$pj+(LcsEj<%jyi|F~T;BZii7bRd
zp0atwuN-wwzVy1E&%6Brwz14VTP?vm!V23KXYWws2#EID;sy)X9M-VPw#gpc)ZpkD
cN3A;;*6@6ec`>(btg~O`yA3{@gqPU51!gd^J^%m!

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/exception/UserNotFoundException.class b/api/target/classes/no/freshify/api/exception/UserNotFoundException.class
new file mode 100644
index 0000000000000000000000000000000000000000..33141a3aa5f1b11d2209df04d6866f25ed6f87d1
GIT binary patch
literal 559
zcmb7BxlRKy5PeQU7M6rSxT!*cL@2N*kdQbe1Vj|8MIuLwoWw~CiM{fA1AG=05(OW?
zM<Hgp3mR;BF29*K9>2UkJp(wz$|N!jGtF4qiZ-s&Gl}l{$YH`mz5oxC4D;7wEcj69
zK0mwb$jB+98S)28D|f`OxEcHa>dq?N-><ej_zYYd-m@|usNOvnk>c_zpQntWakZ51
zSJmuhwZ)J-F<r?}3Y3;%GHOfP5bYsF%7N*KVM|z*`k%p^8>pCJC-^7ZK7(I3iS5Xm
zN{g@k+0%CVIEK~BL_0N-Efp)GKGrlXkxqh`_X1=4JdV<*_pBJnTVrqdt!(qQ(p@gT
zvHViT5v9mF<t8yTFfkUxgt#~UEHQ8{;^!p3@l)YN<EnPi3{SC+Df*{$G1?xcNfyZ4
xMTRWE+bXk1WFN@Pph(gu4NA(BHA7b61BMc2-!XIVvW$7sMY>y{vna8I<u@H0mu3I}

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/Household.class b/api/target/classes/no/freshify/api/model/Household.class
new file mode 100644
index 0000000000000000000000000000000000000000..9d3f2ce2fecf6b3264b6b3b37abebb8131ebbbcb
GIT binary patch
literal 3140
zcmb7GU31z-6uk=u{DE!!*^s(5u9Mcrag=_i#&PR7PC|p7PGCIK>5~i_Pzn+wiO%qM
z`U~2bdOFjGKJ}?Ts?&2<LVzM{<z*$U&OP_;xo5Td_rJgXCZb1lK0^sgW@su)DM}04
zG%fA5EuEI}y07V7L+e-#+18$0Jx8{zc0*9Yz>urF(SOmkwr)1Hie)xSOf#LO8JZO|
zW$GO%Xn6!vb#22(WwSI-3!rEXIL~C~QreE7MK7Y~8f~pAT}7J9(h|c{hATS`r&-C;
zD$mS2EvwrFZN+e0XO`CKy$s#TQl4&ueOTYi%Qv#_3Q8Xurr{n5O784l2+F_enXb{1
z7lvb8w&k&DTCVOImWe`cp^%?-+tsx$3In|~>ryK>N`mf0zIrB2Y3r_RT<Gnd1Z>)I
z`MKG@Ap-eo{jQ2AKRG?Gm1{o=+K9|?Vzql66WlXZqiO1H&xXhk$0a+g+|WNy>(UWu
zHY2mVG-b^?)6G5*nY!-O^#;;xMPg69*Zu;M$CU~e-qE{V*?5eF&jcM7v>&g|GMcQ4
zJBWv`j#%K-bnU(hPBo=lhD(=sc0HP*PvOoJIGVj?nDV^G&a3I@Kl|0H>+K8OHu%|}
zoN`+R46${SuB;Zao-60Cj^*{eFK7jTU?T;lUmAb|+Y34f&%H}ur+M|fSp;cuc>>*Y
z2p$y`B!_WHM&m}B;dsqh*$MZ8cVX^Kx-F~mgKk4PSA7LC2=H`V8x8Sg<e(KG-WGD%
zM+Z7GbbY+3*lK=bOCfZ8g_(Am7v*XEASRJ7v05~uN5z83k7BZnh7B}k%2$5;(CH&;
z`_heXsnYe2O#06|lg3wZJo}_LU$l7ON!rX-t)5+%PYvGX3xRR&^AR!WV+(B!w_l<y
z960MZDO0%OfFwch<7o*`8@PUe=MN=qQUMb<`~24o+rsMvpL7^MQuo^`bPezBVD9cu
zBqV)IpU{p&yO_W!7eI^GLvj2C(7o%RStPqh`xx(|1Pxb#YpVDMiQiOB8b+>`XoVhN
z<N#jmr}P=Ff<C7&FouIO;o$Yi;4kSblo<}53kT;Tf<48)M(&4^B#U8^jfo`RfaD;O
zWI0T-Igz9Ul0*D1dCNJ#H35Cn#l0&MzvC_eaR*AyE0%Q+;Va4SJo_90m%{H1<v{r@
zeFqpTG)9?;OX*q8r<_rg$Ml$zin0RgpvpO>Ovb2^9V_SrXwM62cz7E#ev)}4@tX4l
zlc&+i7UL#k&yOctqT(>wQjqK^CZ9zoTaKHIcg=XRRoWXSTMd#u$7G($zKp*@#5Ck6
z6#t|()$roIE6No2uV}8ApSq&OVm@_6Z<Vp2Y;feo1~w@8HUOXcU~q#9>NAm4cdW>i
zy5n+Fsu2ZL;-R+vJ636c+5?K4vzAh(Vi$0eSi9kpz9(MNZH(jF5laetZ82gKB<KY)
OB&ec3HvGXjBl;gJ3Yzr*

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/HouseholdMember.class b/api/target/classes/no/freshify/api/model/HouseholdMember.class
new file mode 100644
index 0000000000000000000000000000000000000000..d4138b1a7c23ef13003b556291f41024f1cee750
GIT binary patch
literal 2326
zcma)8+j7%Z6kW&hg~UpeK!D&TglkEhi)gvF=9Xasq)ng`LS7jqK41k|%1AOZ{t*6y
z&NRae4}3sBs?)WP9Me&xu^;Rs9j~?a-s|kMlYjpG`VGKCtc{|8kqU|yN+>H__XGP~
zsH2wqu4_AouH6or+OuB-ok+I=ueqh$dpcAoxJ`xn=1}NAbhja4PFWbmn8Il5SWV&b
zAPK{?ER5p^g(9<H@Yx*F8~$qWlNP3Mn)opAw8ByjK2_B=!HqFY<7@@zES$%T!sLPT
z(Xl<pe{a9qJJ9>FLivH~yYVB1k%h%wg$vsqKX%)C*NxmgPp|oY5IeCO_>sb;%>(Cy
z6UL5xsKdyOV(ss1dz}_Go4UEtY$(iULbe>gyA!<fH4(Eph{MPTls-CMhecNVu5R#X
zvLpW<xc<|?>$H997Ja8pp4I2Ql`}1i#iCG=2eXx}weEM?I&@+!Rb0%>Q6M|rLn)&C
zdS`p%<#UD7dmW4X^1|Y9ry||MWS_DR6(%-aU%%`~5AHa0TjBI(u<v-gPUy;eZ?hP;
zT-twQxCoTDm{q?U6s`_Vj-(1n(sC?67jIfJfl7NRtmH!b@sm4dx{-cGiC-%V!xbZT
zNn1{C>9`d%|8zp0a?I{yk(BBOQMfix(Fj$@N~)aCBbXv3s9=*aSM#v_1pZg0P(KYx
zkopEWkq0n&4kD-W8hagd!hQYBmBX7(Wxp!ZA@7E+b1cN&1}<~-O>@{5xpKyWBZF_U
z*0>gACieDbFoGYsH_P|A2p2KWhf9%B;QY%*T{%Wwr52}N4>iv98b5Oy*YT4HaRUq7
zSY!a3tKwR!{|)uoWKrk0<OED&iQiTNz%o|&rm$*AX>uh^KATCtiJvKvCRfwsS|<4y
z+{z$Nq{(xc<lDGITO{&tTnk*w^`#@IzxY(Z_oAzYeJ(-tiWWnX1G`IfiFc9SDBQz+
z!cIt5hLudtyC*qnB!4y8osg^!E15J$PjcKyHt--T%ZXtnlTPYMP8rGb{C^=S+~ZoJ
zC$;()oH2gZmyb}XuN<LTzfe5Fi7=M&_jbbS`&;YzOC@s+<a}!Kr=Ax<o+ODPB#Eh_
habN6``i>KtInfzRC|%-sMrRc8h^hrV?q9|yz<+Tk^?v{W

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/HouseholdMemberKey.class b/api/target/classes/no/freshify/api/model/HouseholdMemberKey.class
new file mode 100644
index 0000000000000000000000000000000000000000..62aa2f14991fbda45de8cb186b9fcaf7419f93c8
GIT binary patch
literal 1153
zcma)5U2hUW6g{&*kq?1VELN*h>j$85-$hMKqp=axSmo6W>=dRhyUp%mQh${uHYPs!
z1N>3OGrJTOc<2LjXJ_s?_uO-bU%!9+1n?MlbFh%gB3(oVYXVKrw+{mqj`iV*EswQ5
z@g3#bFZ^k!#=h(H)MTK7m+C~IFg`oncLXZkBl$_%uJlHB*Y`#pLwuo#oMBxfI@ove
zD4>|d#Ue^56Y>}FdT^wM5fdM2Pe)G#Qq5LBi*<oooTPpGKm}U5`m-FkN?_~l)Qj{)
z^>wIu@YM7CNJiTCLV;~c`6z=(+Q%vgbr>mcsO&x8old-tK-!ZNG8E_XKWOUD8j10)
zG*Z#LU(;H(*;;IlEPFIYpxo7-dNnnsyi1f-yZ%tReMz+xHakp5V@+l4?s@H{&Kz~T
zk9`v;g$tTCnv0TJeLC7x(b#w1$bc<IY@RGcp0VsMfmV^^5BzB`RL`~XxjuJdKKTb`
zA_9$-E<d9aj$=CSV23ZD0IFiN%=6;D%2#L3Hu$TBxWo&-kmZZb_^^)4yxJnhW)zH>
z_BV(x+*r86)gXZyu5v9V3E0LpehFM(3C=Ep>np)G&|nEu`5~jlxYoXR3h|Y@e@mBR
z^k$MVD{W*Y-R>|uBluCFo|~&Fv*)Eue40__V#*SBS=p%UF{T*H?eECPO568OvBX`8
z<u;Pkx!m$hF5&SsERGJynVD61V8rte%k}?Bu+pOT^%Z7XxJ5P#x8vcPiQNJI08fF_
A4*&oF

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/HouseholdMemberRole.class b/api/target/classes/no/freshify/api/model/HouseholdMemberRole.class
new file mode 100644
index 0000000000000000000000000000000000000000..8f7d7ecb924df8f7455ef58e951149af6d3cd828
GIT binary patch
literal 1209
zcmb7DZBNrs6n^g7(ybO46M32V0!&>2DJXmzAcTx)GK5fBLi}{MUAB_0HC;#IH-C~s
zB1EI%vp>psZa3o$n7AhG>ACkj&pGG0=l=Nl<vW0Ntm;TGSbkt1hoaSRkKfz;oohFP
zn(*wGLAxayfmhoV&58&Q0#BsCpqkJyK=#ln9x%+8{u^D8@T7^9gr}Ut{o;Y-kgK;$
zm>6WxbLFklVbNh&c-sfDfnlU|44N20hC!=(fiD<F^H%AEpK{yde%;=yoQP^vFffWc
zI>t<lV}fDmPe9RcH>reE?zP3<F~e%U2fgj_R;$pn;6$P8*9*NFBtgudHE|bH3<GPf
z??xL8W4%;e<SVP3gl16p*(6fZPMes)tW+Vcp~bM6xBAh6GX6%Y+jNKw!zI@juiNqf
z-|&h@D=%&+#p*+AhD<4_a<9xoS2A{KRi8JBJ#$?lhV-t88bNKJhZGZukQ!5?hD*lC
z3DPXr!47tuAgsAQ_vDDUb)QG=ka(56Ri@!tt9o5U*LxC4-PihPVWU8qouD07#f~dA
znYdxr7v*4VF4M7$(p^zDC*{}!WNChZbXHC*?P%oZFiUZd$eST6AL9(hXAE6o_#=4?
zkLf!Q?<o{NjweXO@hfB{!pN|>OWeK!lktha;`6j(cA{Wmj=Xt#HM+PTWGGD<l$dOp
ztU_D*-2Bu9CO^^dznF9^$Sz{0R02=az#_eN3|UGWau6w{Y{`O3UtmQ026m*JL2-`M
zGw9Cs&XQQhQWv(>g-w4YROX&?f&1rBV&{PxJNhLap2Lu3b_5!Vt5-=@4O#k6bnAJB
J=M<B`$}i3n3u^!X

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/Item.class b/api/target/classes/no/freshify/api/model/Item.class
new file mode 100644
index 0000000000000000000000000000000000000000..b688641d6952c34ef9beb5dca757c50c1eaa3a7b
GIT binary patch
literal 4081
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
IRr?<JAIC{E>Hq)$

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/ItemStatus.class b/api/target/classes/no/freshify/api/model/ItemStatus.class
new file mode 100644
index 0000000000000000000000000000000000000000..64e06d80fd7eadc7d4b702cca27ac3981a0f73fc
GIT binary patch
literal 1146
zcma)4ZBNrs7(I7w=~fFHbAn7%UWTqiDbwMXA%WmbNG2EyONgH?quWZl)^r_--~35B
z5+NE5pZ!tB=XNv9pqWkDr_b#<=XvS*@$<`f0MD_eBE~T1`DP=qJ1wX2-sJBbv+W<-
zuDKK1Z7bwqx03*atV6*VLt<yQR@vR(dvnOJP#wiA3u;_PLQv%ctMWn|+|Z$8oI%ai
zwyFmei(&EYXekXzq*RRSm_(XEsk^>sGi35c^@N{t)8$^%+&en4>tR_#2Dem9>6pfC
zhKVac#p|}I@+o(__FjWwEkDHGc6p~$9y+kX!10>p;R-?^($DI+gIR{Lb;onU4Th;<
zsR47xsKudZG;}tOgoyJx7O*IWk9z1ZEai>=7@rFLCdk|LgBX%k$Fq04?ISzb=SMD`
zJo`%r#^}v5q^o|NyEPs-LTI2Sd%R7e>FfJoNWHSdmVf-32ZRajfX0x+mP0|y*|ect
zpF7@9{NUK}xJ&M_oTf*X3P@MV8#OY=dfgrDuQXIhY<Ycj=Nn}zX!+fsZohQI29j5<
zT@gQhvq&q?klCfp8DU_6BDoPrWrYdpi$Zx0i-cREY=NS<v>vq2n7BmpBV`N^=s6aB
zlL$YJhloY^5=Ft#(yVZSo0nh$ANvEJrxU%8f`I~M%XBLY#s>i<7eR`|iWDXKq!yNE
z&oT3fUjL<};*pplQcA?|I0dZGZAO&UlqO6@CB;YvWO@RV$~Uk>sRzkAlzULE>yyP%
z#Oi>yHK5IZC06>bbdGyxkfP+i93|=n=FXsrHv0>jh`N_)tqQXA9vk%Y1WySQL+KZe
Cr}BXS

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/ItemType.class b/api/target/classes/no/freshify/api/model/ItemType.class
new file mode 100644
index 0000000000000000000000000000000000000000..4385e0b62e91a1e5cfaa54d03562fd157932e5f1
GIT binary patch
literal 1078
zcma)4U2hUW6g{)$qaavHTWz)0R;xly+;^)crdC6OXj($z;{a2bx;smD2NV94CK?kT
z`~m(b;~7Au1V6ILy>sW@b7t?k_uKa`UjaNuH4hI<S)>X`BO_2cm+zz>NYnFQwa-<@
z3S=H>qwN!crAoDx!!mMN<O{fjg20Z6{IggkeSJ3a<v{yk)K!6Bvnp(k21>xwU6R&+
zv(_WiJ9I3U3s^x(AZ298!tzYbsf{(O1h!6w#_CYDbfVjVdTLB$rPYy11U3nHD`PAD
zfr=BISY<lOuXPFAUzmEKjEbdI-Iff7ie<}*b#ZU>4+P(H%{WBu*>R&;YrYZKUiijQ
z6bwVd%G42s5Ll^eqZ-4ot>UI+2d>YkBZHQVwTq{hDcjd<X}A7&Imw&uDO;nY<w|u%
zu(7BDStc7}HP<hsf9aV{Cg`=wJh<B8m|iN|kGijAOb$y?$w<J2abp%TC3K+tX*7&G
z>bZ8!6@L!?fgAXrL^|e7?dTAD+yakV=<(w=L12~9Dx)&}8sl|^4P4;`H)Wd6&|hUb
zP0x*`-DKp`3wL|)8R7#E9=2#*8pz`st>bsF>)56jxPcwoi{OvQzGre4TwDmgiQNU@
z;yk#t5WI(5e8Ro_klrbfIk^7`+4=v@jnS@s*U99+-D#rLZQiB@1E<VB?ku7#{x9W3
U-zlXFJlrL}hkN6hI2|j%4}as-=Kufz

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/ShoppingListEntry.class b/api/target/classes/no/freshify/api/model/ShoppingListEntry.class
new file mode 100644
index 0000000000000000000000000000000000000000..8bf16b3d49a82db603b42b9ce6b303824adee143
GIT binary patch
literal 2654
zcma)7+j1I55IuvqSa@Y2VG&D_jb+&u;Kby9F}_5SWt#*^wjor-Zz~wV+OSKpi>vsn
zq$;kY@{kY6N2PLRcR>UVHV^D<@ANs{(|xA-=ik5n2Jis2BqCTyAZj3nxIpT)`PM9U
zOuJP)K6x!0o<RJ*Wn11ufrVVYp2P(#CXh665r)9ZnfspObfjquB;J~xfjmAH$mCw-
zE9X2)i@1d41X2c8uqv=)JH^w!blcYHuxR$IV%KTPPO;i{dOgc-RV>##u)Y3JV9_14
zTGI7oQy@Kq__BdD#hPfeW#f%(s$d@(xPo<oh(%y(0$6eEmY>eY1~!#Ptl<o7PhqYZ
z$l|&{)EoAs!1ang%d#iCHG23gHw<j!Ci84N16Q`44#RED06rVJ_{iG^c93J%X0s`q
zdpzsr4BXGI?3V=AUouatE9;hPopj``Z9AUnS&r=rT;U1dn0?PI_GI5>`J~;D#d4Fd
zo7%0X(w2RbWv#2u(d~lkDZ9ly-iu&7|L{bVA0Hgm%C%oq=DP6vPG``y6}LU;bWG;F
zKmkG^t93s#?P1M1wpBLKeF{QgxnkM!XwW^8{hGoHtX7<c*{Pd-OWEPasMoewg#3*9
zos$&<#9GoTvsbIRNxAysV7}bkSE>*&_*y-a;M)J(L;aI3sStts*ijm)MglkJ{s9pM
zA;!`W*q(_QJB0yvN5Z)_6B0@%<_4!t=UDmCW%m!8uk(5wO0VrSpPPNND?RE*so|^w
ze4VI3W|Cr50L7A2kZ}oU1SQzceW(HoY|wvvJSuP&XzWuOg&Y?lI}792z;~}YgMLFk
zv6PT9=Tvc5m1dTfIgTuESi%<PM1&$v@W}x~G3RNm&?<1fL;DknPjQzYI9<Z+i(HHR
zefA2UbAuyLzriV{-{4pZH{x8sV5Eo|JLkS}piF&Rrp+nO=a)oPi4$Dc3V%Qp7XC!y
z9hSm1{hLqw6`vaf07*odPaJ8e`FaT%T;}>UcZ`4p-{4zX0^i~LFn~Ix3J@#&j?Axo
zi9ivm_`uQxI5q~~(}Fjq!6_}cg!`JvOVi-A7W_a9PEUg~TJS?W(nP*G4PMuRf55H=
zyfqEp)Pnc0uL0kh24}V4$2ee5losxBRZ5N*?z}_htocE&7JYOk@CbXQ`WR^b32`z0
z>mbEUp6V$#=A{hoNl3ZrQ$9mkm*vvDl)()PDOY^TAN7<Is(=5%gS#10uKAQdp`y$3
z>bzM7w>qTE`jm$_(ot^BOBoD>kaF9nJjQb!<*j)sgP9Ui?vOHq7i@n7Fa6P{s#XR5
E1F&r5Z~y=R

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/User.class b/api/target/classes/no/freshify/api/model/User.class
new file mode 100644
index 0000000000000000000000000000000000000000..4a0f7378b059d306697839a8a3179bbd13974ae3
GIT binary patch
literal 3154
zcmb7F+j1L45IrMHmThf_?bs$a$K>uy5+#I7u$+M7IEg`)O{^GVF3DILTboF`Vt19`
zPvHxAg{lA*9w?sq625_=fHSizTM{cuJnZhwboc4*Gu^$v{q^%N0B)i_garE1NLomt
zUtsvDd@i$9>Fj3Lwx6m}Ake>HJ9cnOpl^C+a}Wa<Ok>DG2A05a$Ib3|%CFcvds$hx
zvo*J@s@aFW@&r<LplZIr;k*HD1a>vMp@Linui<bS!xly`DsZSxDlkAZPX;a#CZ=av
zY*(Ul0*qlijR^~{<EX&s0YFnlAYGAuL4D2m8TOX8IBwwtP6{L)b3E3>Zb>$m#;LAJ
z5xX{oNxWg<G|mVN`6^f}msR=pp1{;}zB?7UkhgOd&f|hW!Y-5OFfrpi?>f6V&Fr*=
z8O#a{?%19m6l6^?yB5Wbz_TOOOBOC`)s(79yQ+<|7Ov`(fx7hl7p_;<hi_WAt}kl1
z;x>F$ajWH3Rohk`ujSZ-h7;H|wQ2kIc2zApjvL6pb{)!&(&;nl1u|QwuI&fPDXHvA
zIVW%~R&-A}`qET+Q&t;_Y6E_t_q*igKP~95xK}q8D|eO)#g*bCfs?U5mfUKi=4foE
zQLReG+{YRQE41O*Up355kh~3h*O5WPBY8JM@|vZ$(B+cux092*MJH3SF|0YN=&nj<
zj~eNc^h>f#H>YEDmqKxrUf*Iq&(LeKUJpwq$qQkPU+yhLU4165v~1Q~a*55R+sk%T
zp`mZJs7cW!<CbJ~Q+l@EM~BIvV)JHCcA-GGEOQ!TQEOLGVHe#3sb<gEJnL?3f@3Fd
z1hVvORn{Yy@f5Cm>Vc}c&-I<BcIl4YFxu9PrXK_>3hy2?LVLqTtw2VpwXAzUAj9Q)
zRQv)*xa+uB=0DQ()T{|cG2eOif9gd0*ZC7W+bfRYOBY#6)6M*kOovr)Fb-xm*|e)F
zsJP{I>2VTp_|b($gBDK4TkRrBwB-QRnxt^qLJD{PCS^2&+2=%KOte=Kn>4!CT!(h=
zY&AoR_`2F7P(+uu9@=mlUP;}xb)66DqP?Q0f47mb%n29hUQIe?n5G`<rsMn`;BOD;
z=bIy$BjhdaM!0*M-*>owSK$WU;{oS!B+l?V&nLHq1qwKQBf+o{BtpT>E!?7%lQ@!g
zm~k3Y{65_z@PTnVPQ^v;Zhr=$u!K8U_Hma7{KM|6-ZQEiYmpBX?(-+g`e6zJD@4ok
zEBH;#{si&8f&Y+iEe3HuGH;`RJXVdoVDi_-FX%_l(hIXMk$#0k0{OXDI3n;3#<@5q
z@GB-)FNq&9_3hukYxF*7^id@FKEt2lS-#Ja%k#$51o0*r+#1%oB5vgKW3Dqu{E4A7
z#{R%@lavne0R;jZDDvH&%}bp9j>3fT7iM!fCL4i=*o-m0*l9c(Yy3&9@m#0zc&zcK
zvBp<AjgQ6}Kf)H1>&*FDr}2px<FJTWHTXOhB;5&esw>DB1o;w=qe$lYHSIAw_XEy$
z7E{Kc=quLc6&90Tg^l!trzydW?h1+RILM2=LWa#3LCzS+Qat2buaIHeMv#{cWH}!4
zO0SS%uSbwq4Wz;jTSVV#zLm>s8ZvC1u#~%Tsi%a%F17VnvwNM>Lf{G4WcNCqgtuSe
np&jom-K#S_XWE@*aPPobX5ZOU=JJdYBv9QSM>Q%sKHPr*D|CbS

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/CreateHousehold.class b/api/target/classes/no/freshify/api/model/dto/CreateHousehold.class
new file mode 100644
index 0000000000000000000000000000000000000000..e539dda79ba105b42e6fcea45ca947424015cb2c
GIT binary patch
literal 598
zcma)2%T5A85Uk;~f~%kc>d_kuiF@~TAu%2hO)%UCc3_7rJ7#t;@vk(|n0W95{3v73
zf>Du!mwrrlO;y+X$Lkw_Q|y<JLDoUeMIHr)%7ou>KjQJ&zZy)$&@dEEWGu}YL$=}d
zi&#U^LCM8BTm~;z{z!`?l%so}-%5X~0ulLvQGQzsZp4L}B_dQ&z>tgiR4{CJzA1V}
z%XoZDvo_%v${iVt?rb^``i2jpbXyI1)aP2-e({(yp-dQBoqw|vg)<hWn<}U_yj2>U
z<ZGeU_&fLdWX`29p$e|Krhkmkq@mPPGd&dN(u%Dv-F#>-#Q|BCA+s4pGL5P%)#NtC
z4eET#jB>vD0`^En2AdS^7z8a-bmt4GV2e8P5IYoqgP-6$(C{a?xDs4NjkYZKh_Y2y
hXtti=EK@rvx<21nP+M8{28KG}@{F1aHM=SC-Y3I(bYK7g

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/CreateUser.class b/api/target/classes/no/freshify/api/model/dto/CreateUser.class
new file mode 100644
index 0000000000000000000000000000000000000000..7260dc6e6e2e993ba588d63e63a6246582966815
GIT binary patch
literal 991
zcma)3%We}v5UlZQ{n%h*l92EYAY=!Lz30ItA}13f1$-adV|$|YZZtaq@mC;$kT~!G
z`KTy0Ys(JK9(?KE?&+$nuD-hd`wze&UR9Ap-b2Ah5ha1fx%?`FP)4KRQ}0~$tw8BO
zN7}v@$hX?v3d*Q>sQReE7kC}T!O*B=tcTwNd7*<zJWydUuyJr?l(gzgqKrUMO{5M5
znw<sxnKe2Z?K{GIKI)FGd?AzMTWkiddEZCVH7i4H5_=*iN}zB=dVzXJN9yEq(o^QM
z?1k(!J8@rzU1_wdXU&2g>qOv9XBCnA{QXGT4^yG*t@d510yR#Y&NK@6td1Ar%E=tQ
z(YlLncj@j&WykU0R2r^hm7%&CQMV{r-J-0X#h0e9j<wsdzHs!Nvk^OVDaR}38F>wU
z<(!Xcrgh97=sik|4_F1vg1NZ+2jXWsw$A9DL8=W#e>#9oJY*%Xg>A<F!N1`B;A0L8
za3vG`C=<N446bH^A7_Fa%ivlj_z9j;pOd}E>^v&%zWohvd1)_2Z%!v>OFKiHn*z^>
oEAm2Uuy~$Lxwa~$JItK2o>IQZrfjTA>25ryY^Ibu>0w^p011?q%m4rY

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/HouseholdDTO.class b/api/target/classes/no/freshify/api/model/dto/HouseholdDTO.class
new file mode 100644
index 0000000000000000000000000000000000000000..dc6209904498162e074dc6092e73af9bc6a4362a
GIT binary patch
literal 834
zcma)3%St0b6g}0Z(<al7Nqo$E)Quz&?7gpzA~TTD0VVrNx=czsUDD|Y{*{6v%wj&k
zj}lLHi^h<J6x^y?_nuSdo_cuv_aDG6*2-`&<DuZgMNyz~E-z&e$+#CBcg|He6)5iL
zSf_geGxbKhgjtk4lzn`FFR&h);4D$YzCODO<b@6fCR9-nrY87hMnly%QFw5AEa2#n
z<gHismWg}YmhGdDc~k@nu^cFY+E~v?nrL>hwoh7t`Ie5=(P+?7$*Jr_S-0uRs4Ww1
z^XJP#+SfyYdh31S$nW-4`kMl4^~TuqnM47P#iLBy;+yh|I(L|(7wVJXMw>(bQEA_V
ze`P|BR3%jA5s))3jYFOZEvS5AMoCv4YCB|g+{#UBA=YS|!w+=0_z~HOE^>FlaZqHe
zG7Gp1d)vH+xXIdTjJ6C?EHL_c0~WEwOkf$G7~g_#;a#)n;1yh&3jT~QQ^0eR;PO=P
zSA63W_T{Z?FzRe>+`*gF?Pcg?_Si{s-S%XS5ctkpS1_qC`GKF)DCgcwX+3?R%#)SO
Gh}9<)w~fyL

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/HouseholdMemberDTO.class b/api/target/classes/no/freshify/api/model/dto/HouseholdMemberDTO.class
new file mode 100644
index 0000000000000000000000000000000000000000..78aa9cff21bc0931f30177f0cfb76ff511c943b6
GIT binary patch
literal 1328
zcma)*+iuf95QhJ8;<!m1dV-eov9w9r#`hGs0aYMUiXh~E6K@+=PPTF!q`VbKAS5n$
z03Hf4Yg<LJ)>3YEy!L+o%>Fa}^Y_<p058z0!9vMF*@cY?VeLYE5nd=J=iceyLJng>
z<#{j(;+KR{v(>L+1yu(%7j?LVgNgFaA~_ueXLC<n2HsftGW7gdd2iHgDn}~xPvm$Y
zqu0Gtf))6LcGnE$fOm3!q_bUfv5GZ9ndKtFP64e`e&!R$voK7!4HuiZPFT@gZ+<BW
z`vq(+^G6lRBTo2=??PDZ1{3*yrti=bgOJ~Bbk$IVeGvtEpS>){qhLzt6r?aa!ddKd
z8NX#$4w|h3G*_MWh2SuzuS?i11Q#qJ)H5XY;;<0Q<;&c#r)iys&E?B%^?9I9WIR&-
z2N8*}jAg_gIV_ddzE>o+P`Z|>XG~grr-(DvuJPI@HH(JwIMDsu&Yj}X?C7z_BOW)4
ze~S{YJl_0d>Dfyn&k{!m+%Z&my}>(=BXP9bKSAG;V_UrH&p-{^yt?TD+{7*35pLrS
zuZ!?^IA8grh5vBf2;ap$1Kh~Nt`WYE2L^aO4>yePL-xi>%6`UCdsJ!f|A3RfbTy&3
z(i7RGwISL~!ei!a?j>7Fc!C|1WMf%L-Iy!Mbn_IuCdu_>C3TOlBsUZNy`(YCe<TzS
Ap8x;=

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/InventoryItem.class b/api/target/classes/no/freshify/api/model/dto/InventoryItem.class
new file mode 100644
index 0000000000000000000000000000000000000000..d7e7924eaa6698677d7bc49134f6c8e9d087cb5b
GIT binary patch
literal 2672
zcma)6TXWM!7(MI6HgOckcH)#$+J;<h2M`omDB)6)5C|9oB!tVG5^roVvc$-%%;aB{
z88T)1&>zqr#qjOgmSwRqe$nnq=bUeKzRUk#{{0WY9lXsTfsr&u4J46b$i26YEYq>v
zy1Bjoo*xK?)NR|f#a)JxQh6_fGZ;%FV_+OcAAG|L_8rcUKC+yEZyz!gOB>~CPp=JF
z9YYqAY2*y#QD9hhJ@e4#t%iMgY+4^|v+32iW7dRcZn;O?6`p^*C3urz%;!yuuHx1i
z3g7BxFpXjwGxBCXFywoI*F4YRmdh|xdKbM==e@eoj|R@+CkoOE>UG`{yv8sU2@=Kr
zY~UCC%8;-Ll#76>o?BOH7Yxi{o?+avT4KFHZc4olG!V99ZdigV=%Rro2~F*LLA@cQ
zJ0$~UROnSpSR!aK%vJR!NndspMoC>Xa0!<gM#b?5O2q5{)-E9w=Zb-=_>Hn=)oQ%9
zcFeGF3QcC@Rg3$Zf#a-Fkafxv!(`QV`Lm$8&;4CX<-bt%4lHNS@@;wUyc`t`n|`D`
zK)Wy76d+mWVvAfWl%hFP7Bgh&V>Rk+i0ZjZ$t2X8vX#N0{mWhfP4}sGO0$jH=~Y0n
z57n)Kws6~c@{2IvO%EAN@ulmO&4C1!8HNnO?{`zObSfj3lw_;z*;FZBmE}FEzo%R@
zyxMcix0+mVpAwQKLZ6RaX3s{+93xn0B<&+c7Nem$K1zx~u!xg0QCQc=u5{PR#nShk
zl$<nax4oPn#86gBe1`C$naih9`n*)M9WU??_@*t#TA{B#FU#qI3)HL$8lz|ENfUu~
z3EB5*rKVOZ4LP;abWtmHwpyuE)k@t*YaUeaNYV2eogQL@c0jT64_IaLGtwuRsEmBZ
z)CtahRJ7~#%n}SRFp3;K^Y~qz6cK;m2Avpg;?It#Nvr&ptbD@xziE?z6p=B3i3m9v
zl5b&EL!OP3vs&_PEqNhMp45`>;I1a}M4X({lJDU!4f$-G95t->&-byWAuq?t1#RSY
zY-q?Uaq^Uw`~aI8vKc2&YsnAsh!QG`=N7H9C{vY{6P)i=OFPlyiapatbP_F#K$b7V
z7V(md4mmnJ#uJ_7?68uu6GF*3C0W%=E(|Lvn<|uCQj$;cOn1wPVI^gMhLU+DxsB&K
z$w=o7_ENTbD0xmvzQ9YJ<npk$lv5*=EGx+!?CK;}hLw~9D3rXUBwt}qCut5VDQ8(I
Nc~wcirix17%~#IX+m-+T

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/ItemTypeDTO.class b/api/target/classes/no/freshify/api/model/dto/ItemTypeDTO.class
new file mode 100644
index 0000000000000000000000000000000000000000..a977658b08934830bd63f81d1eb8f3834c186483
GIT binary patch
literal 831
zcma)3U27Ua6g{)LZnT@m`ql3yK7^`;?0cK^rKJ$CNg?9<s1qI0-LOsq{;L)m3VrAg
z$d3v=vny)EhcIww?%aFMoO|Z({_j5kC#V<TAmbtH!$nS@IF>gun8<J#ocG46Zv=A3
zI@IQ~K&H{`=COmkhk}nM@C6RTD7cK(Y@{#efxObeG#aQ$FfdVYYSgqdzfxa2=K_u%
zkh{GiZ%5(qlO=oVV-H1vY$&HnptRO=VPefL*1nKcV6Ux1b#^`NskkG1lcYQ9%Sl(p
z+UASPtQqN<!29;2w2|H&DsxJGrABk@^+ch7$KqKct@5C}6z9%Tbh)t!Zgx5IcV$M=
z;D?OKVN^_E9swz1bse%Gw4lO8bRGBAH*IGut{Hh`4Md%`Is83`i@%VZ=plC(oCZ0@
zXUqcb!rr$2K>SMDN{qG)Qj{6}v;h@VnF-YJobe&}H@u%LI#_}8Tfr~zatnBO6I|E|
zeudY3!oK`58H_qxA8z4o>h=<JjXidfRJT1@BLv>?))h>OOy1(%Hp<<{Qd&=!lxeb`
H7;*3)2x5$0

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/LoginUser.class b/api/target/classes/no/freshify/api/model/dto/LoginUser.class
new file mode 100644
index 0000000000000000000000000000000000000000..8c885d48ae6b9842444bddc63ab27a899eb89b73
GIT binary patch
literal 784
zcma)3+e*Vg5Ix&ldWmhVw%!F1p;a*N-d;qX;sw;cZ`*CUB~4_LD*ly%BKY73_)+3)
zDk-*okihKD?3^=aPQJcBJ^>tKGmiw422v){$S{=q{DE68_Z;i0)ferMA#)@>8J;jC
z>y2g(S>z1lO%z}<Y<s@dRU+ug?vusur8V$7!nHb~Z`r;hy}LjthO`)P=`vL8G5bxZ
zq~{!JzM_eeCd=OQAb9juhaq)JJPajUdg5|8XbE-8TP{^9w%_J%lPjt7-(o84$$(+U
z{)d`Fn&XJ@Y@}$h-k8?JP@s<MSWGsE`>XZo_C}LzyAWZ|?_6`m2O<=T)D#Fc=E&dp
zL)8}NQZG@Az1i1>V2eyh(C<jlN47>ca)iz_$US5zmMOF7WV*Wh4)zkY%~RCRAc_h_
zbJTzZEK<f$MUCQL@GFdGdQ4yp&dmfb%>>U)g7Y)M%UGcidh$WE80p;IdxJ5l+lbIL
m>d~8wbnBZof?<`aX)=?D7}jP}&i$8Cdm2-gBFgp1h>af;G=X*i

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/ShoppingListEntryEditRequest.class b/api/target/classes/no/freshify/api/model/dto/ShoppingListEntryEditRequest.class
new file mode 100644
index 0000000000000000000000000000000000000000..b206e383785686444ff800845f469a434c613469
GIT binary patch
literal 1290
zcmbV~TW=CU6vzKVfraf>5L&!n@Cr0>-;A;9gH26L)=P@veOac<RM^4Y!KB|x6OD-v
zegHp|@tmblN;Zc0uyf|j&hLNbTz>!g`3t~v?Apj-!$RIc0Y!o8vH#h3M}8E#@A}6w
zFapJADpKZ!z(%XxE2D(61>3<U9D&D?c8_A24As$z>ra$B)&n_m2S&Typ`J`s6nZK#
z2a$<S4hG5`%1=|7kZ4W~D42H^&C^l1$LbdxR9LzY=xJp5<f4Nb>H_6t8iqtmLhDQD
zORY!Jk5YQaL4)sF!B7St`DT8fo+ME5R3zU{$9)-p@cSb=sd+l^M?F7Q?4KUy%}^x*
zPrUz2Y>(a@O7oiH)>`eQH>T+cl<4O^=Oy6KwtJS)&bjOJlmu)h=D8G-nRdOkD&6i;
zIp0V#)Pwha?2o09G38MrU>=XQOYs`Z67z7ZVly%iXm|BA4&*Dv1#AARrH{CkXi~d!
zG+251Xh3KMcQdur!_-oL$d*B+LXp-><hf)8*+S<B#8=wnaG6&A4U)V<t24WRtGGs<
zz;)c9^*sCy)))G@43{(Eo0;&|Dr{%Mw{SZna&;Bn%!Hen@b)U~WWslFmy+Y0pOWQ5
z7dyM(VXaooO6kVz#%aa4n%okBd&Ct4IaPA*XG?CaE6LqmNLEtG2Y8tE%Idn3JSYpv
YS}NJfmfT)fl4ouq*+?bZ>7aD}0&4rq^8f$<

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/ShoppingListEntryRequest.class b/api/target/classes/no/freshify/api/model/dto/ShoppingListEntryRequest.class
new file mode 100644
index 0000000000000000000000000000000000000000..907a4c794d2cbf667e00ed7c42700c3e076e5c8a
GIT binary patch
literal 1104
zcmb7C+iuf95Ivil6W1Xjp`lz#DK{lWswKn|g+5S$RLNXKs=RNKt+SQm4fYx-e?=t_
z5)XU;ABC88FL5Fxm50pitoNLmGbg|Q{QL#r6`t5AplG4wpo|Jb^MrrlZoos|{V+Tc
zBh65GDMP9E8H(NBpoS`H7HkJ=a2TG2$~}%mJdww9m(Qd-RbvsjW3Al&M9pS0^gS8t
zH=&N^pTy@x#6)OIEv85FnK&F%LvPX1Q=z|SI$U$mF!be-N<wXJt~+R<%}|RI-zOG9
z&~^s;TB$(raF3yMKqD|TJQ<4j$#f{9BR&l1rsb&-4+cDvrar$c>4}UPo_qf<gnHF|
zp${`+THRh|rc@3?l^z`!9SjZ~`wIc<OV1Y)>hUsdySvKT8_?$72|ZEck38a2p+!V8
zssy}fMaN95PL|@LlVP#@Dv3totu!mz{FiCF#w2W$5e53&6zNCyQ-tv;&EyVc3uGE9
z6mL-FQf8FPJ3qiq=}^ErMe`X%)uHH|J-|(DP{nWyw<#`zzrp%SAG6?EF8EF^xV{Ru
zbHR79nbWzs3SP?v-@_KoXU2X(+3cvY^YlBcRnb<8?wq|i7i|_|w#jgxaAihClZx$p
j%KB9)jWL&$jg;~M9_CHiyeg&f_>!`fQa+-Q3wZn&JvzR<

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/ShoppingListEntryResponse.class b/api/target/classes/no/freshify/api/model/dto/ShoppingListEntryResponse.class
new file mode 100644
index 0000000000000000000000000000000000000000..c9f6aeaaa6f9564d9a1d7dd3508a052db9ac1705
GIT binary patch
literal 2229
zcma)7YflqF6g^Y=fU>}r@~|k#%Tks{Rm2CNi4ch-^$|h7FYVASmffbiHQ_(#f6>Io
z#1H-ef0XgwDJ|`?m44{nnaP|p_nf)6^XKoc-vFLtX8<Ae#SqpIK~!MFcCx2c>6Wb1
zi>z6(vgb}gma_%V$sU%RO2x8^Im`84*<SVHgLEs7?Mi`=RS?i~XXa-!TQ==tHs{#I
zZKm$mFu=T#yi>D1UK!M&VMt)Wtrd&X^&~-)ZO~oEDNEB<=n)M%?~Ub4GXF^y7(c2Z
zi7|n&cTu6EXLG?BA9(Woh;}HR2@R9DMLcGqAPc(}0*hT>EcBx*tNXQbc{`3N+>YUn
zhH1=@z$<<4PR?ZB6Nv6uw&lGL=*ui0lggs>4oJ^vX1Ps~GJ_J{BP#_)a+WRM*3M64
z^~gLa)5>Vh$(!Y4vug4Daxv_cELULjKY4b&kZpl}%4Cl%7tm;Uc;)qYM{Z5G1>%fo
z*i1&zgxwREr|ma5+`ztUTAS{Q=rEVuavN?XGk&w!OZ|=XN>1UuSvAk4C#z&eKLMJe
zXxJudqMf3tiCN+dX{n+~L)Aj&CQ(grOV(01NQWwheQi%hUA|vm+q{`<(9#XQcad-{
zpZK9utLEjt#l<$$wQAP6yfH^DHbs98QTow80)4?9tRnTTiqw-TQXi^Fy+v^t0(UV>
z-#MCPDGG`a;|Ihy8iX)U->6y~!2*r7#s)0n9?b;Of#8@QtOtUZkRb~H$#Fk85eQxm
z1P}Ycqk&)pD*-1b{NQ9Dcok~_;Bh~AED*d-E{BxnEs7zw*I21Te5X;n-Gd4}(b#cm
zH(v$cufToU9ieWdzgmF@!IZIHDY;Zylmm+LAvWk_zL}0J<GoUH)wL-3K@fNpOgY>u
zB^PjuQdg9lcpQ{vqE|}pg%)K}Q9i-bAj<JxDY>m$l#_~b8qY2%zfg>kr)lFSQtH-?
z)jDFvS{-pC6|Q60NJZ*M7^!F-*N)UwMZ9h>v??NfSrNpldY&sP&9623)QD{hs}ZY>
us1YX_RW+32g3<}76NF9G>7mx?;pH2n2b8{@?MaFItr!Zd^DR0lgzbOQzkF2y

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/UpdateInventoryItem.class b/api/target/classes/no/freshify/api/model/dto/UpdateInventoryItem.class
new file mode 100644
index 0000000000000000000000000000000000000000..e1b2ee24d30695946a61018b69b14be6fd85ec1f
GIT binary patch
literal 1094
zcma)4*>2N76g}fOi&K}T3#F`O>EZ-|-`QS>kP?MO6!JbvrirV>uAE7weiQ<vMo2vH
z0elqVj1$rl9MK2g@x6D>Id_?#zrOzf@EqkLEM)SqU1X6HC>_ZY>Gx&W_20IRR9g$=
zo&{l`UkGHpa??QpP98-UOK=4qg^_<4t6?uVJoV*q;18mX>iZoX`5%uvQma~cqCy?T
zr!}nx<O+DyIs&3@n69{3K}o=g)j(1u>@rg|nKc*d*bvALHCY7iH`0|1?E$ZhhEE0T
zmsA&6X#}BqGa9s1{6V(*jI1@Hw(K`$92kEZv~@2S3iu0{7xX|Gr>nHlHGOa<bpe-=
z_vbAzSQRKRXiB60j#plw@>l)N@SNE8>g6W)@mlF#)OjakIZ#@~EZF6(3u3lcH5Utv
zPStk3|BD$&@gN$-ZS^WJBic&Y*JJY-aF6S-_*gRhxO7^WttBUS#4`^r3OU-V^n9Lz
zXSVVU;wyhFY|@%E;NTjqJGp=@T&E{+12<_WU~7`AoFV^-$&27(D)<&|r+}9~&w-ax
z!FRAd1OF-e469$}z-}t|E@xvUWk2C`%zSc{?J@H6O&1dMW-`Uxv}rRCGfh5i;<AEH
uiOvJ;{6o1v#`0w;&0=Ph6K5BDGfHbxL*?NZtCyuTJDyRlC;a=#c)Z`}ueQ+u

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/UpdateUser.class b/api/target/classes/no/freshify/api/model/dto/UpdateUser.class
new file mode 100644
index 0000000000000000000000000000000000000000..b1675e49d3eb92b2227355ae65d2ef3ee308bdd9
GIT binary patch
literal 1457
zcma)6%Wl&^6g}fOZ|Bjp2{b&*qa<#@8&(w9ASzV~rBWYzC!QozIdNpWApQy@A|w`k
z03U_8GjS8w^&*?OGoyRXJ@?GD|Ni^^2f#b*7oj1Ohi)K?9K*AzXAONGjK%PqWzU2)
z@f_}2PUu<ZGsh13dBA-JO*jno-lhG;wp@EUvU=WhbRfA328t*#6o<kO!ee{F85*&~
z)6f@Ds$rlaQ?q<x3s-_`2I}&rFtdZ;tLHl<G_aY+mVqW(RB=`CbN`YLLWbO1F%{u^
zhD@h>L0lsq9+9?2ryDD()G_EEs2PS@PfYpo)uhk;GrR99f!@G&FKl1Pb9AYPV-Yay
z_SUiFfWe^BhpVQyZYYS_rq(FyqwJTVOxu&FQBoc(ly7#D!ew9ePdprZ&WY`lqapW6
zm_dM8y=EL2m6ON<rCk@K?W*8W9H1PE6^;njxsgRmr{0x6;D<uGSzArYEBRp9p{H%o
zxakyW%4ny_AyJVgKt+0YiX|}I!ChLn>10u46tm_}u<t6ZO>0hFR&bB@#v%dt@qkVY
z5AlfBBsiZ0S5v`{Q^DmVxRwguNd;Gv;Cd?f37(QCQuZ5)nrzbCn}hwJorYD@MTKrH
zGNPuXA<|X)cquzelSCg8!*lFX+AYfbx|H&PmXt+B`68XNye_4D>m_AHQFhWPtLswA
zu~|~q6=f6MsBxEKmON>jzp$bFH23Gon=j`mo7?&vx5|{1zpodlrN8aSUt&^oE8nLr
o|6RzaofM%f_cwIqzO+mBcP*$z8gI@d2}-tDPMr*sDrngI4^rFNb^rhX

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/UserFull.class b/api/target/classes/no/freshify/api/model/dto/UserFull.class
new file mode 100644
index 0000000000000000000000000000000000000000..db963b563ddc8ad363cf5345cd8e746114abd6f3
GIT binary patch
literal 1212
zcma)5%Wl&^6g}fS>?95eiCf-}mIA4Hc!@-T4I&a!C`c_`v6&>3WGcr-j)TNsfkcGF
zf)C)M5O*eS;yRY-#@Az=bMCq4j{p4q^&7xTJgmS#!9>wU31x=eAoNC&m`&v9tH(b}
zZyFAT?+xS7`#2L(ckcTPh8!|9d#C&h_k13Vy<QlM50sK+qk<|!WhA3ne8{JQp_Kw2
z#gR;)wvD=imc*1xzlsK$CNA4(p-tjz?f3mtF^Cz;FJvI&R}6*D{t3~>B7RFYTAlrr
zzBa;8d`+$y8a)|^!}+u?qGR6owU=<f{SzKZbxuAO<B6Ox?DhUX`vHSZjl1jVoOAt?
z`4}uhy-|aa)7jE#yOTAl=4ieX@gy96;1Puti-?TaL`ZemO7oHiifIunY4I!#(HW##
zC6vuCN~C%e&ZB|oN|jFiY{gGi{Mey|Ht3cVsM6)2H$!b#S6Ura3k(jn=($ZNk1C^D
za({q*)37V_EbEU|T%~t=3BWa6rxU{s+@xogY-Y)|T=K14axF`?bIG@HhsIHzpHnrI
zPxsLR>^r>~So<z(_VyBy_*OHiKp5^4x<o5RlMXxBCD?|fc~MD~?MkwuCGX`+)-Eck
z*0hqWYsnV&5|^K-7HI&-{fSF@c=z!Fru$@pjRvNU!Cm54F*r#Kq@izyiqTQOHQgB%
eO}(I_QL~&iZ<C+%`=;jEaje{x-6ur@5B>olj=Dnt

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/UserId.class b/api/target/classes/no/freshify/api/model/dto/UserId.class
new file mode 100644
index 0000000000000000000000000000000000000000..9579bf34ea2a293cb7b782841979caf42c435208
GIT binary patch
literal 331
zcmah_%TB{E5S-1Ufi%$4F91%!0e=9GOC_XARyhE@JBi!6N^RsMNPHG2Bo2H4ABEVI
zNF0%+(afxO*6XkDk52$Mn4}00CWtb`7!bxA^`b<j>`L6{8(lPn!L_lbxg~^W=Zge;
zgk$T(((8I{majrR8?kkzu0+{5@l<O+E4iud$yoj+N@rJBglNjw2_tE&p10dv`$v^m
z>`bI9RJBmvbh<aAW^HQ1sr+v!C#Mgt^@YAOUE1*XEtlPVoFL&v0phcdv}e3B>me(#
hs{rxEJLrv#02yOf20|P#W;-6^5F=LnRg3|SegGCyNWB06

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/dto/UserTypeRequest.class b/api/target/classes/no/freshify/api/model/dto/UserTypeRequest.class
new file mode 100644
index 0000000000000000000000000000000000000000..f9726a06cff116a50bbcf30df9e6bba7c551466b
GIT binary patch
literal 855
zcma)3T~8W86g`9Bc5$tUXtiI;8))Lb+v-b`CQWEH+VVcY0ApYmcLx*yRh!f_=|g`&
zf0Xgu#Rw7}%p`Z_ew=g9z4QO>?>_*?s1}jKl81bN0+tm@m-<?V10D6k)7GVFJB8(s
zHnQ$SVX0Pc`gj4~LovV#0)=`Mhuy@aecQbW^~i?9xMK!k$Hn1~)Fj_;M&{gHjZG>%
zV@AGo*rPFR(ukwp2O)hKU=1aOydy@TJX3Sw63Z&)K9OBvtzjecZ9HtTfo=`5>bR{3
zO`TZrAA)(;x2eKG<JlV7!tWU;%0*|nR-aLkDOK=TAY&<1o}?c|`stKmqc%@aZ*u;x
z#`WXQnNIZ3IFnGMN6>_Ia~ASIDxl&;JWkr?vz2)(bIU!Hg`&ze=J=~Q9{x`D;!b%N
zpyYdL*Xf14l|=XdK>f<f%CwRODK=<>NdYR@q^GcjSF}&Tzv2C4GKVSHUkKjD&I0i2
zJh-?J{2FiALOLI1gHh-H!7aRb-Cl;?VvS5P(Je1ogu+`!3yMyO&O5wcM7jE0O4;cn
L<;2;|7O{5^`+Aq`

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/mapper/HouseholdMapper.class b/api/target/classes/no/freshify/api/model/mapper/HouseholdMapper.class
new file mode 100644
index 0000000000000000000000000000000000000000..23c4613fef8f00b7e43d6e9e665f546c076fdc1c
GIT binary patch
literal 730
zcmb7C+fD*85Iuzj6mO__i%<Fl#@G)4NsPv5T*Zj-y+CD4c3aZzlK5FZnfTxb_)*4L
zKu9z^xXI4t%*^Rbr=MT%9{^6VS40Nc0=#A9kY_0M#Zd52=pJvj`?BL0@^z(^YcOOh
z)u#d$7>>2!&sN5PdVb+zpm=1uGUSmM45Z~(CW&QW!tU+JXYkG`%&_JwE$@=3E$yRd
zhlFhSrX#{9VO8o+K+gp#W;pTxb4ZP0)tTwZ7mrPbo5~!DX<Ds1C!_1kYz!hJ`qHg*
zf$820D<bKnr4|>1pGg@GEB@%_5~o7$tJo3uFMtYKs;7lZEX{6y7u4tUGV8YShjU)d
zpZ*&(L9t~L+mV+lz54Q$cD$vNv{{DzheSIS$!k4Sv7)7%X>FWv%4iyR+c&nCt~qu#
z={P<vt$7D1&?`#6ELi%ENG_7cNi)*9qc^ZuGBPNVOv4~+iRAJ)f%FRC(H5~rNQojj
chV==wL4`92n-tBUO#jx%+Qts)lyw*Q1`>M5mH+?%

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/mapper/HouseholdMapperImpl.class b/api/target/classes/no/freshify/api/model/mapper/HouseholdMapperImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..637c23dab2c21985ebfd15f4ddfd80cf5928990f
GIT binary patch
literal 1860
zcma)6+j0_F6kP`z+K|r01Tj%37cUVKVtaQC@e<8AVFaQ>CYHW+LK|9vrkchwGhZ@a
z;H$nQ6{pIYx2f{cADI7`Dlh9a4HyD7c{%%B_TFo+ebzZ2zr6nd;1+(1Ab_9>MMDT-
zfn>$jpF3u)Xg%N7jjE-W?Sfg-%SN?oI{J!TubD-=RLFX3f$*YLvE17N!FXa_#Swv-
z?g<L6-Hu*fTa7?PFoJ$)Dh4zRVn|@JduR((Ahcz=>4LyWJdt@}yfXBXQQ6Wnc4aFi
z6CTwtf>FBF8g8TUPOrqe#5|@UhT{S%)8&k^DG=S4Fz-5+pK@Ho37n)WQ#M?WeV^3#
zl-z$181-tZyH-hGavWnjW7XV#OkzsKw1(3-BQV%@k*5Mm&H9}Muz%?YPT`!qhZ%0i
z(}{H%8`qG)tiTb=H66pX9f4T0SPv=f@2C2a#Jq|N8gyJ_kJ?C07t$yiwVe5yxCDGA
zBQ9&Wf~y3qc-#9MvAXfX+;rL7>$sufM-4ZzAaJq!J$2Vex?C-hwrjVpk+(1KFrMk2
zrRA1N^zi7E5{XY@QKOip4vhl!vG0z25{YLdd7o+)7|K``GgmKfn9iE9QR2=>#@;ka
z>xN^=wZEyjMXM%oxknwn`KAQ=ip{4YFx?|To2r1;^7q=)t2+m{3k>94WAh~+q+j)L
z)^v+@;gR7`+0+IZoc1N_=|#$py=|+*+YpGfD!3#teDGW;d3ufQ@6>j+*{v%bA&dXZ
z`ZoKtaLA|w#AR?_-rA}dZr$Mx+MOH^gWuVPUNK$KBYC^-Y?==&DWI{|Wj4M>Df<hu
z$C&2h3GlB4g5cMLFvmMw>9m42G`kD&j*|fHa+Js5f4Ia^YdGK@?sFyN>!X(p{zLxS
zv{Q5cASB-Y1@-AJ`m)Kn9Yl68ENyfLW68Jl33_=?Ff;f)Dj4M~Muahr<Cwrn4{NHC
z&&OhBEaN9)4l?EeekR_EmrI0^<|HI|-l*vpM#`E#(S~T3nl+tzI=6=jfnA)<a&}%I
zH@}BDfj=?931#*-`WKYs?6|UnYkNoq@Z`<cf4!m=ujmPW>arAtT@2$aqBzIC&0rDd
z37PN;pXI5J0X$^6iiB@bSYnA8Qix(6S<V8;@jON=y_T`sI(y{P8$vMr8BrCJDw6-<
S%=c6uGb(^z8I$*BYu^Aa#L=(-

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/mapper/HouseholdMemberMapper.class b/api/target/classes/no/freshify/api/model/mapper/HouseholdMemberMapper.class
new file mode 100644
index 0000000000000000000000000000000000000000..76241d60e2e7893faf8abc4a5f463351107d0b7b
GIT binary patch
literal 954
zcmb7D%Wl&^6g`tTNgE0YZD~u&t6ilmu!Pv9L?93X$)SiuWzp3nnc7o1Gtqb)sp6|x
zA+g{C_$b72ii9xD0!w%9_|CbHbH@Jh^V@d-&vDp91=R+E4b)H<XkW;M3{z?1@ML_U
zCSIU^tc~`4fok{Yw1G8&r^bfoPGyNczYOJEhci1>X*iSfxpLuKn`bJq>2#oGW90_R
zs6g<FAc0n-je4IKCnGsd8QF~NM5d?G>Eiu&Fz|`a1fE6z->N6D?QLm_*P|1GPu&&e
zO5onn3f$D&GCdY%!}dV=#7;j*Cuhnl$I)BK-#Q5Ff6R^7Gxg3abf(Gmr7_k^udN||
zFS0H!G|arqCq686(<aVXy|$2PPNjCQhY(Ts(#49GwMOmT=yFbUJ+rx+a1%IN=)6@L
zh?5Tm4!hCv%5$&NFw&VP`BH%NN~s)oeW+t2eePKKbGgRx3jNAD_y1|ODszSMeR6LO
zmptF-f@G)E;_B;rQZN$Oxkf+bdcgr2{0oYw3aX7d*LA*y^n$+j_$$O0ZYpSUEslX(
zxWRSf3P67o2n3@oqS`#E3EZaJq;&||qHUi+yucj-b~5Z@FT-7?bg=&?<sRYpX%#%6
OJzVY{EsGRg4}f263=DSw

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/mapper/HouseholdMemberMapperImpl.class b/api/target/classes/no/freshify/api/model/mapper/HouseholdMemberMapperImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..7539af08ec850660d5c61e4fa131f8696fc8f316
GIT binary patch
literal 2850
zcmb7GTT|Oc7(HtnM2xr;3{41ilK{a6gOfBR1ZWa+p>Z*g#smtz3M{aQZ5dfkL(<D*
zANmXW3;LSAn4z8N^sO^}>>ud==u9tXWdlZ7l;T0V+Wju)e3xDQ_V<rJ19%5t2jPQX
zK|n<V8U?Q9&G?3;7c<7jPFyP(@tm2~v+<l(DCk!Fp;;>G88e%n({pROHRr4fG)@_L
z!@ecpk3^RgGzrA&n@QWI+s6IHg&-98gJ_1TphZP1+5`sb8*l*-P&Re@v6<BcMk3MV
zsg$Jnr1bfkiVk!NG#7RINl~{JcM7yK8u=e)qDvBYmx^w@F3><Qi8R@t7Rs!?;~+Vw
zq6g<`fJmf)kyB!j`V|Oos0icDN<1VNfv_hCxlgwjaY;d+ihc|TjMWd_NqJA?3R!_x
zR)n=^N}DsKEEn#2VRzhm<w#b>z6~cNgDN73l2A1{0)t+LkLbz*92V%@(w=GYl5J$;
z)0U;}B#oloj1i0~h^x4Qt3-Y%B6kG>MdJkvfJK}LVhC@^mblL4NFur<b;nfPz_>t@
zVe6J=n+$R{gM4TvQC**G#snr6OsVWJwnfKr5faO2#d-ZX{nFv8)VQN!8h7b1?<|M*
zZD+OoW_)37OJBF0wB1+n05bw1+jR8<n@M2VD^4!q$&+&7lBHpi8o@&q3A{(hTAF3r
z6{(P~1sGjbkQBI7zn*GS6~wG;`vp8w@V@Mz#{xa|)nsKbj7I{JH1nGb$1E0Q^E_e7
zYtcBnvNaa4tl|T#2&nAN8N({t^IDE+J{sPXZ5dU2AFB8WA5)%{S0jIfY*oDC;8PW!
zNe4}I@F1rdS&3>*#k#c8L@UlB^LmeGsX$xO$m{bZd4MizYx3yoNSf<fc1g1g`CeTN
z*cqcJFz#_0{a0sB(oyE<am^O;Fy_iObvs<TPGyaHsMkN%X{9A)YwJ&WO;kCx&*^r?
zOh3{rrhv^tex1i1rC2`ITsjRbyOYIw*hJ2PK)Xwo*4mFt1+q?acOQ*0kNPU6n=X|p
z50dT}-6Fp`r_}WbkTh{7Wo+g(yJWErUb<PI9*a9XUYaK$36z{J>-FI89N(;GDOEY?
z`#mIUo16@TDYIm)>obNd^{^|9l}`wHm5j>#@>06U4-)wo0PjOI@|osaoTK2_FtiKt
z11CP{e9CR09UFYA6#;A_!#5$%NJ>fNZ{g<;hz<XW2Jz}AC@Z@-GZz~!BUnbe97AQC
zjSX?qTgHVlF2`O`-tYJb^HTu`5l|QXo#ppQ4-c#Jyl;DXON1TY7b^CvzUc`DwuqsX
z`%jT2j+|ppG$PMQgW$fzXre$(iSc)i4IHQUF%GQ^?;$3zi)(Y7y)7_5vWJ@j-yzJ&
zZGm6VJQ0WuoePw4Zx8SKu>Ac$e>lJcHNg7_yq~}aNg={GMlnU$w+T@OZHT*Zv^a1B
z()|I2X>7wH#1N1DB4<9>-0$WnrM6Kz*n3u`*9L#%UkE7}Q84i*`u3@AQ{!{~`|#Ys
zGQgRn{0&E$mdHNkS*B&qNy~g0DVdg~GFIjINg3L)lw6^;t7LYaVICv08w~b1F7qap
j%ql5~9Po)?2QP?Ortc-bsABfxFeN+G68Mr&AHMn*UZwX+

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/mapper/ItemMapper.class b/api/target/classes/no/freshify/api/model/mapper/ItemMapper.class
new file mode 100644
index 0000000000000000000000000000000000000000..87ae4a7776dfba4474715b88e129408dec2d90ee
GIT binary patch
literal 1421
zcmb7E+foxj5Iqw%2}Ev!0*Z>@g#?w=Cm%pcOVmnLB9>fUcp8!+4DKa0J4?xD`DB$3
zet;ikd1ezL0-+>Tlb!B4-KS6Q^#1z&<0pVucu_(Q14Vel$fF=IekhNmAIPZXZ|oha
zh7~BR>PXu)fq`;mr-(s;#VGdojY<ym{;@CH+7IKV3j9#E+sgP=tHOG=74Y8jL}09@
zBlR&2_mtU^djUNYwYVXJ9ci?)yH3v@=tQ7W`_KF<0z)=-eCswA_)zW>=nyOYvNmn(
zSEC~p+1MOsNOqyF>_Oc8B#jJ}Rfa`*nn?soJwEyt%C)RrsnvmB(}^X?8HYgL1rj{8
zsauh>siFEWX9HI+t9<QT+J5l!TGrU3kxtE9$8EK~wINWwtWOSgd9Ns^n~J#yojPYy
z;K`O^!>b6)D6c5;R1r>Mp(9bC-cOrr&33yft@`(6_q!HVGB9!J-PeX{TOCJ95%&dN
zp1qpt<lL_YfojRX1@<mZFIr$SJ<l#M`#FuQ4qZ_?(Hw<0Q50L55em%IV$*VSl~|KD
ztnbE3N3Dc~<&R{Lvg^|qL$aPo(^4GZoNls1Nt~Jn0}AdnRWlEHQogKw!VOPKn;GQ2
zb^|)*bacje+1+V@sSB8tA(59RifQ_FlI6S4!giueC*O)Uk0L)i?pFZ$v;QGlJ}tp#
ze(5{JH*Rt$bwR*5u5mxy0q{8jcmkssqi5U&30%)y6PRRR*L8y@H@R|{B6=D#f6=!x
z^z>=;?H+oT=sUQJ0o<d{W7OP9%6U2#xGHo$;Ci@=+-p1{#p48vC?}}&%q3?&;n7nD
S<nSyD9A(flm%j_q!1F);tc;2P

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/mapper/ItemMapperImpl.class b/api/target/classes/no/freshify/api/model/mapper/ItemMapperImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..f706573ff62f86aae997966b629c6e2861bb78a2
GIT binary patch
literal 4510
zcmbtX33ppZ75>JS{bFV6xN%}oXdE}IchPjCm7CO#lUBh?h!dwtm+)e}$VwzVBRz$<
zC6rQjDA2MN=)zjIwrOb<r)3EcD1@Cq!2jSJmhaBflO@|y!r}NF&*;s)^WE=mGjrwN
zZ~Pp<UHDrV4QR9w(r7}n!j7yPJ(+Xzv#FEwQF|^G&A16C9nIKtb51TA_ngeQnJP37
zrLrk+mqKHA&$NYASJOS5cXGaN7-6iopf#>TtHMS%mlS}!mn+P8(UbO!=jP_4zHDBh
zCFytp=(g^$Q}!7<nzpma=$^El&&PTyzD%At<;-}o7PR4d3u`snu}-1y8ac%?b7_Te
zp=_u^&sbgEMNTmb9W_0W@Z4xTd&bEMG4Wv->(LlS1RE^8L*oW)RM@aGl87rb(FgH_
z!rJaix?^rO8I!#>X>{R6isgN=_DVMysh(+p+oG`*+Z0;4-I$&C_RP|cPUXG@FO`mt
z+MZ+f-J#Kq9?EmyD)|6lQQQaU)94ofiP?x-NX~j<-k?TQwrSxu!Pf|G(%6Zc6*OfJ
zIvJbkluatEtD-pS7EYvnV{X;B4YyOCyHv=pujE=1_l>zj<4(kUfT=<<>Eu1(y1oiv
z#C6k-oi%jt(%6OFK0<{;M<qfa??Vi0j9`z?cgnN90`qk%_pcpGU&_Gk)!2u7e76M3
zOz^Af`p|KW{dl*6MfV+=pK}y8*98_C13RuUfk`UTkG|rTdZ0$nhkTF5K}@kk2sxZc
zIEj&Yh0dC&QXNFJa9Cp+N2uqy@@-!s%{m*Y1!~l4xll?e*u$_ns&NeWb8oUK+q9$B
z-c{<-wjNYyHyy=f@^CI^&yS_@-fA4jdo9=+CoseOUlfs5g-|~AFg?!J7Z2kBIMO{&
z@^g2*XIgY;HBvaGuqx#_Ih$p#&=I7aL1I~(@3GZLBV!?};bM*jzK9fvFjBL2e!@9R
zTml{wjhsdvVn^0|uCAF<7Ywrtp3!(e&N9V3R~pHv=PKM&%Q+&!cDi!@E$d;l{5T%g
zcmyAyU3S7$*79E5bIigA6}Hvcm9UazqlYHLI46DaG3kpRW@@dhBzB5|NN*D9k7|4j
zANNaP!p<--)ef2Ra%?S3mvi`}#;5RUKly#ps{T=ulyq;y6B?hz=M=8<oma9^Azsgc
ze!0|h;v!vI6cN5p;R_bNsPQFySz%yh(k64~670-XCyC#B#3OP%Fg^B%@l`x+;cFUS
z$2Wr1HRq)q1Y~~3P8Xa>W@~%*{uNG>i1_p=Jg4!zbhcHjb!krYb_9E6<=fJ?zhl5g
z!}uOvu<(5W`+-8+;^FLfV(GS{l_2GQ9>J|l-#xrtD6APvWu1va=7f_wWV79~4946U
zJ3VdZQu4d>G33pr*k1=~IG0z5>N|>@=WPF>6uqNxLk%^P^$c>V@_?>=@-MFg>e4|o
zr+G&y8QM1Pc(ZQefSqG9ve0QXTb}^20QqBc=|C}^KpIMLiCO%>vs}!kaGPIKl}n+t
zX+j;<PGUur@CTQu4ArB)i!O>?qr!6XqTMo;N@jWX<ruirOQ~H2yObMccD2M;Mwa$!
zT7g1W9ge0Z6;=n*>@>Wq)le`<rEMuF`~p2jW9Kz`Dqh+lCJwse8kLqpi*DwBai}4>
zYgsncb!r7w!E5#tRbjkVmlG=wFYiP(PY!VfH*PO1*HMVpiNZ=CtfakXXPh}N<!191
z{;Y8O(tha#>(O{R?Ii8A7*MXovNm^`atpZ`XJ1M>PP<6?&kX4sgVM=xBTs<_zLVIH
z<SD^fGv|CL@&AwbYd2RF$Lo79K=rP*7SM7D*6UdF3O_dB$NVqvD^NMad+>{#X<q>^
z;bs0(ay(N)HoJmG{sBk&-a?Z)|0dQSy@0ok_xBa?_98lE++4(V8GDNuknx>G+#=(<
ziWrjd?jlBIytjz4{@&NHhVuhO94g|z{`1_r(U`Q8Mu6Qsgbie}5v|yS4n80{$#*+8
zV-Q<-)85Lv@HSphx8pD$0b+WWZ(hlC8jACHg%ny5$E)}WX}o4IR5M=Zq)BmIC>C*n
znnLmK9Gf@}2NWMT+IJBTDGDUUIpgs(F>n#56`n>XC+}0Zgvgzt{@zHah{8q8H{i$%
z|M`a@6Eb8vdA|e(NM?{^Zeoyj^09F<hHwkRbDJ@|m#a}eHpSeKz?UfuV*wXw;yUi|
z24@X;lj|KOX0rCv^4iZz^wyxU`CnLP;kbqLKk2Cw)dlLwlez)Fpbqa1oC)PeI7(Ez
z0?OwY)kjTKKUBoy60MIE@rjD?NKk+nEgj-)H{Cl-i$)lp(TXs1l{s|LN53RyE0gqB
z_;tz7Ml6Qm6896E{;x1R7KGt5wZjmn(feuiI2}4cmrs(y0a7?v6$UYPX&5fo3BzUl
zhUWVr`fZ6`tuS0BRX+@GQRjE~eJS&v;3#1j48jm$7(Q>p@Z<u%Qp7V7iD!%Wri|ZO
zz;}!IVMS2<G&@4O?<2qa>FfttK@YKFj`PK9R|ICT9GF3t^dC%Mx=iX-)W;ubN{CB;
Q3ex9_3DIBpzX5;!FELNZRsaA1

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/mapper/ShoppingListEntryMapper.class b/api/target/classes/no/freshify/api/model/mapper/ShoppingListEntryMapper.class
new file mode 100644
index 0000000000000000000000000000000000000000..387e6536c576a5f0d9971c0a8b241ed1cc584419
GIT binary patch
literal 1394
zcmbVM%Wl&^6upx=2`!}!EwqIM`rwtYs5gjBN(4ehs^kJnN;fQE;!KjM{9<MtDSLj1
z6%q?RfR92PJE5)O7^zsAv3>46_i=p3zkdJtNklKGu|x%0D3i5JMJh3>obeI2Jsu3~
zcil7L8b+l98A#J&v`}xHmgyR!XF+K9mC!@kAKN^VwjcI{XZt*ggt9xsFp6X_aHKYe
zfl=e*6lY|;h8v?*M+V|;?01Da;av~NniIO*JLO6y?^Dn+L#Y`(cm5|?lTp=#nM&G1
zM`56m@^d{WZidrr<aqW>nC<m%1{6>^7G@as-gCu$VT3|6H}$MGjP~kIs(EarXD6B=
z;S9iNeU>N%!Yy{>AmAoeXz1%~n1h_MvkkT~8S}XRZn=e~Ykd{^nG|jDB^Da9^eIpF
zoX9CH_X}k5pn$DerN-yUtL->2(ica;NNR~mdldws;YMO4Ky*SiNM=|Y6}!exrWRAI
z5wkerUJQ*l=exk8WVjj#G*~v{NbJiVARWfa1#3wf;hz9L0=hF-pTnLs=ViKA(&!TP
zN;=gtI$er{qC08zZ)9>lYZ;*@M|wY*Q$`zeWDyFgSg}sVH17aG>*Rm&K?^mB*R*!2
zjQ>$`6$!di3Hu`6Y}{FbKK)MY8y*U@ggr46t<ZJs%M%COZxC4w=qiv3EJYl=DYORS
z6k3Pn7FL07!+V1^FHBp2?_k|UfMiua5_?HCINZ~8pSCsafU-+_7YQDukshY|qm;Y?
M<72ERAiGrm1MPvN#{d8T

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/mapper/ShoppingListEntryMapperImpl.class b/api/target/classes/no/freshify/api/model/mapper/ShoppingListEntryMapperImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..ac5c6d6d2fe4e096f4d9d9259bd8a077abd837c4
GIT binary patch
literal 4093
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
OJa&BcB`ufWtA7FMpKF2u

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/mapper/UserMapper.class b/api/target/classes/no/freshify/api/model/mapper/UserMapper.class
new file mode 100644
index 0000000000000000000000000000000000000000..4c559384960c9f3bd258e867a0a9f0e3ef3bf020
GIT binary patch
literal 1565
zcmbtUT~8B16g|_H7D|DF@*#+dAJ7(L{q_MQNR@=7AfZBHe42KrWnjBoW@j<{D@-&*
zO?)-+M;Y&Iiv=u!gokeD&b{}{x#!-Q-+#XU1n>$klZYUiKrDq0#2L~%e4kqmcdORB
z(vB!=hWNa6rCwl&X0lrebTTY@s%rUlCEaR8@tXMLsa?w#<v>Y&V3pNDU3*q3{I{0!
z#$4yVPf_+;x9r(MC6Pe13*AU1(33(h`WU8M&#EZlZ_CPo#p}|lQKVzlc)c!^wdo7B
z8ZH_7>Zj2d77CYPbev|LVKdi_ehegVErshCWSGAS80jU#A{k~fg_fH6ZLW%9FCeFw
z%bsu)wb5~oA(p3tsk(x6#ad7+3H6?r9NHNucxCQvaV3r2+>GgM=`&;tmz0eT=xq=?
zuAX7?B*7++w$wV0r88t&HT|RBQ`Ee?OZ{n*ORoyO?b++xOotYVh>mRpu9h{i;_gdd
zQXQ{d*V9}}&n53**g)#FuT@ai)*9v6M7d+1I{``1TTxyuuLRe^OajB3%sGYIG<vN-
zQo6l92E}L|glHpYjyID=P4OvWxV?)!am`g#&;{w+3%DaIQrJrehB!k~d**=Uz;PIs
z&Z8P~IFF#I;~0Yu>ueyd*mV1@gtua3jhnI!R^0ajRVKy}X{^Q}7pS{gx0`LaNZn*H
zL|>L>iu+78jVnBBMu=gkjkMI2*aSTc5qh0y*v!*Ft2nLcd7|$SSqq5L3P|UUz;Zv3
z_;7@-uSkBTy$FWsYaTW7BSsf{gjT6WJZ@l=EE-1KBn*SKL6Ii5fBF|X*kSGqlGERi
zj^L0sqbI-y>G+`#Y^agY1fx`p;}(J54l`IBcWBYUXcw5EUpM*g((j&+u^7XBJRpE(
z%w#iWocvQJ<|Ei5G8B;Y2_Q#iBWoHn<ZfjV&_m4r4>Z~i$igEZk16E|o}NOX{Aa`<
Mg6APqBk&90FTWR^V*mgE

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/model/mapper/UserMapperImpl.class b/api/target/classes/no/freshify/api/model/mapper/UserMapperImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..f248b313a1e65a787c72caca7065ee8fbacd0867
GIT binary patch
literal 2184
zcmbu9T~ixn6vzJ$3E6bn0zykEv<NAtNl00!Vy%?6@{$@&5T&41Z?<HC)g+tQEINJy
zFTC`N)C;#WI^(S~ekjNP*(|UvNqXVz%=5B)UVi6g&p-eE@fUzKe5+#s2@OdDgGedd
zZo1~7XSa`?!=Fs6<(Lh(X4lPz)oR(Ex!1P6YIsygJ#d<i|4<>3%kOJQD@=9Q6(t=S
z5;}%pXt-=(7$XYv-NkFZYi@Y9<=djDFmz=5J65~>qwCcauH^ES@2npzvu-ty%w6Ae
znn$ZT-oluMaRXOyRbipK;R`X88?Cy+u-!ahjOQ-0xr-jUI@NH^z$C7du^nf;+Rebe
zL_cldhJ<b~rjp~e{cWpZOKxTiye)<d8j5`w!kmGOXr!sJ)v%npNY5L1N2Jq~4qs}x
zt&r&+w&YVXSvsjxIV)w*P%yB7qQW4}mYLSESJGN>!=z@hXu!l0#pp=H#^aHNQhCOu
zVOk8&$Z1Ya^BUe)nC;I~uIX4o;u4qp20p|pTk3?I;%78gfe2;|1r6-BK3%idszqHR
zB#S!Rn_z3gv<5>VxxqRsj8vSay?xSnZhKFy=XJgrtGEYNec$pNxkoRP{;|_mxKrsK
zM%Qj)48w<>+lcq?X0C^YR~vmb-$P7lN4rVMjY77E)N96AGLc_axY0u)GJAQ~w+_DN
zKOIFqTDARSx3*(>>`dSGm;v2)MOgYrVZB#0p}k%)#Cwpjq=l_xZ@vfK>lz&f>5a$#
zi=bSi|I8blhC->1ONG7#Jny+T6|i6BVpf>%UH8O0uuG1#=D6gwGje5IEz0b}9OvBt
z$2T~$S!txWZt!MuSMs*-66!Y|2C&IhJ_94z;%amRP{I@56h20oQlk6|5`2K-!rvHF
zFaCt~>?JN$i-m;%dVtXY6Ga}U0^F2+Ho&do3(6-#A2a;pfN>-_f>XH034a|^d@`6u
z0XIY6vmN`9Z+gNf_>>I8m_Y?qa%_k8R0^N*FsS%l7<ce_#P~CJVa%N}X33bV3Qs=3
z9od%y+?D;^0PkJk%aHFD`Lgtx!vym5T;Q!3<IA1#<><c}@=f6j?Dph)ioJ->jrb-{
z`Bunxufz8{K8W#5ux!9GdG3;Dg*^Ajb3ev0dB!n$#-Vdg?)T*Q5?@6ezeXHOryNl&
znU@Cv9!Y*4M|J#2>d5=L)c3re8KlYgkbIBGw@$uI@@+9+CFbi17TGt_Po0`Bov|*F
R^;wv+Oy8P*P2B-}^B?g%12q5u

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/repository/HouseholdMemberRepository.class b/api/target/classes/no/freshify/api/repository/HouseholdMemberRepository.class
new file mode 100644
index 0000000000000000000000000000000000000000..64892776a0a1ec7b9949ae3071fa29408e3421c1
GIT binary patch
literal 1354
zcmbVMO>fgc5PfUhxJ?3W!#9*dOIxKN*bC(nKmsHLtqT<a4%{~J#@XO_qqS4Wm0!da
z4u~^93Nd!RTvOD*!MmQBotZZ?Z};b~Z{Gnt#Fhh#VKdacWn|P=tpOK3#k<;*0e`Oh
zk!<V0+n3#jG$q)Wb5JP5!92sgypxeV9jREGLEiKA#KK@l;!rXiRNcJ)u}N#&GoEu$
zWLWBmL%{<P`utU+Bb%{<GQ*BGK971vg?`J3uKcLY2kwbj@J>(g4D8*W$U<FdsnE+c
zA$l@+8%guRV_2`c({!#5eZrb5`mqYQtD?9@i1uaN*4}|g635a+3<c_H8epNW{7}Sw
zL;cu0G1!9{8}W#;t{snjQcD8A)E<vFkrpS?aM%n*`H4!PdK2@V8OOCJ2es|@43%6s
z(lg8_sD|<C{}OM;!Wov2ls(L}QQbX}Le#OXZ2yPc8ILnVCpu_9rMp4>a#bi__LF<@
zMl=G_R9xK@!8>78B9D}I+*UO5`+t;>VcldZ!_H3`NZCGTC^kan{ui5PWlttwO6i16
z#k%gBrhKN7GFSf!_ijS|0(A%rAbQdJ;@AwQaRwF^Nt&bEK-)5X7Aj;qn>C#~Vxkv@
zVvM}b19bWVE>2aKQq^T#$*ZnnWvZf>OONTbx<(0CDgF-a7VV{5w|{_r#VHG4QZ(0T
gEs!5j#0^@@>3<1pSSM)=gV0+e_&2dZ1`C_N0o{3tdH?_b

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/repository/HouseholdRepository.class b/api/target/classes/no/freshify/api/repository/HouseholdRepository.class
new file mode 100644
index 0000000000000000000000000000000000000000..97aa6195db34b3bd6c6cfe7f1c5d48abb5061d7e
GIT binary patch
literal 480
zcmbV}Jx;_h5QWDJOIViQjw3*`E)Z3Kf&wil2*jRXSUZVB))P4nC=w^5-~b#7F$p4x
zXpkuE(YSc;d(R)AZ|?wb4toKN1k5bS*y%DgaV@bh(&>Uq<H^->PF1N>%GE>n7QniI
z{S2Q`=4can_n7IW4`4&UDY-<Jg)=sZ9j^2XxhJX6qs$5%%H9;%3ko=hja8l1Wqqv#
zoE$~HM?^LWkE7q9D^fb|8AIl})jlP4kBz<8t`sm$e=;<(lZ8nv`pRhmuLFng6k+tQ
z1ZRJe4V>C67tFe~pvo=vmC2dqu#4XpGiwUqS_Q1}8S|G3u0DWG-X^?_S%b$2rtQ5A
IJMG;40`d))m;e9(

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/repository/ItemRepository.class b/api/target/classes/no/freshify/api/repository/ItemRepository.class
new file mode 100644
index 0000000000000000000000000000000000000000..d075ff860a0eafc4c73e09bedc720b0abcb38cd5
GIT binary patch
literal 1036
zcmcIj%T59@6ulim9PxqTbKxE~bYWbfMp+mkV|)-lpfY7B4%127k??CS`~W}7cxRXl
z#PEnFE}Evjz2}^J@9F2)`v(AAz;OXA0@Xm$uHw2Ux+BU$K@|_B7DlQOZ5lp!%8mud
z5h(T98>2o8JbM4q=N(gkRRU*Hc~pl=1YTFM0Ut{BN?m3c?T2g{u@$ljAc4KE2;7)O
zH%7NI(!3{qm%wSo`Kf9kUGCHDO}*+QLLwu4>IiM>DD94$o^&5rtiW)k3D~^}sNEJ`
zz)Yk#fydtyoX?RItFK=o{mHCat^>DikQB8%FXvo9F-DnH_Nq<^^nVa6ExYJ(6ZfDo
zYU1Q-mGN8>gE%tqQ1R?hCVeAd3Cv1t5CdSlvJn%ws<h@LXOEV_52xge{aSba<kf|J
zm?BAPj_t7CmXYf48{wnh%5k+5<JV&E;<q8Nf-8@|F^6BP0Bc}@ji)@O<5t9F!3Ksl
pVJi*URubCI!X*svz%JsXnPo)7mco8|g&BC2WLYWX0URdKN8hJFKY#!L

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/repository/ItemTypeRepository.class b/api/target/classes/no/freshify/api/repository/ItemTypeRepository.class
new file mode 100644
index 0000000000000000000000000000000000000000..21d39293b2bf12e9f5777d02fbec95662983df76
GIT binary patch
literal 788
zcma)4O>Yx15FNJ-p)Jq?r4=_HsFb2o(*vjQp?+*AXxqSUL<JY*CQdS`*Is$OsaE_m
z4*Y=rsH(F`+XOD;VA(Sszj=Q1F0X$70f2X~UWGXZuZ$I4r?NhF3n5b!PNg<OZ(Sii
zd6l$^R7H2GDl9Nq9mt^+TAH3{o()vnSK%ImH`et;mO3=Ou9Jznu<l%Rq?cll%4yWk
zshj{ZSj&`j?fz}A{o;fkGk8%8Cv9S1!q&IOsobL$A!fc#T#l9R+s+qRw)Dzn3>M4?
zU@^v?kv?|>)|dh8ZTPPeiR~zTCqn%_wR;}r#$%$sVTNZ~?HOae^k@zB72&K3e9e_B
z2(2=dIwyJ;aS#RvEsmXSUXtgHsCmq5H`$llJPb}gwvKA$-4@@AxgJ*_&F8150rAtL
zAPRWcJPo3oDvjrgZ+_U_<jv?Xi1_|@dZjTz&v##sKqN6(CWUaQMug_c6^y~JDc#58
zt<U_izef9CL8lspmd0BOycFBqwN(Q(>9TQaiiux#N>h;A7|heEl$6PlRk%;_B1IK~
iplzAf96W%Bw69X(BZ^isIzIjZPv|_pe+p}(x@Xsf!0*lg

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/repository/ShoppingListEntryRepository.class b/api/target/classes/no/freshify/api/repository/ShoppingListEntryRepository.class
new file mode 100644
index 0000000000000000000000000000000000000000..b03733859794ac2466b900f0c36d426519816d7d
GIT binary patch
literal 545
zcmbVJOHRWu5FHmvXv?RF3$TO@Ucn~N1ri9VAP_l$shz|j^;nKWl|83o!2viFVv<S_
zQ3)XyPyT7%$M5~)^$h^dVH`k@!Kp!>I8|mkskyM4J7uxd9$n4j46W5BjdbZRjd%6K
z*INMV492;57Q7H9<#&&{n)v`W7@VL>d1)ODCQi)N0^Jjr!V8{T(WReS@lD8JFVRL`
z)Yn**D#JqFNCx|d)1#<Wsk|<DV<aTqTjev9_oAWq%9RX8S$Av@>(mHeImKYIN^utb
z3_VAwiq*W~gw$S^20Agr=wA{4F56Lz(4?)6VT_fVsViMjsDodsId1-odSI|d=u_8>
cx(Z+udN80<pTUrp5upcLgyn7<cG{cWPww!nfdBvi

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/repository/UserRepository.class b/api/target/classes/no/freshify/api/repository/UserRepository.class
new file mode 100644
index 0000000000000000000000000000000000000000..b8522000f97f717e94edeeda2974997318ed2aca
GIT binary patch
literal 523
zcmbVJ%TB{E5L^dBDCJR!pJ*@m#3{f5i5^f;5fLA-G*0T^*p}l^<<~gy0elo<(?~RM
zK#0R=y(@WUXZHQ$^$h?nVG=>WV5SYvov2qbZ#i1Yov@~s-nf=O*1|n}wGr$xn3VW}
zT%j)b;;9r%AHg1jbK?qLTPJmqJFLXoxM!ZBM_yVSGTvI;5;7R)QfJrgO@&f1m`;-|
zd+Iy3c-D^^FBM-{FO5bO(;9ceuS|B2othV}W)O;=Wt7T7qi>vGF#jXtMe;L+%49-q
z0*J3jZ#~$o_Z=ty^8BmPKqN6_zEeI(P2-kgE*1GX{eF?NE-s3n!44s$t1>!K1p5%c
Wh`NxzQyCKiI3)D1BRJknPCfx{JEAWD

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/security/AuthenticationService.class b/api/target/classes/no/freshify/api/security/AuthenticationService.class
new file mode 100644
index 0000000000000000000000000000000000000000..abcf1c26a2057ea5db7ffca01bc3716d9762c5bf
GIT binary patch
literal 8766
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

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/security/CookieFactory.class b/api/target/classes/no/freshify/api/security/CookieFactory.class
new file mode 100644
index 0000000000000000000000000000000000000000..465e17637925e2ab9af099a52892b1365503cc7a
GIT binary patch
literal 1318
zcma)+YflqF6o%jFg{AFsD^iqOK@fUTR=jHwtpy@dT4GBR{bGhPv<ur^vYis~7x;6O
z4;VG^2l%6mXIhXnlwdzhXQpS~^PKn0^!J}1zW_YPN)R4+HTZP+(Z$fe#}Bz-al2yV
zxA#O@GITAPwkekwys>ymLpQ_d9^dD#<VIb%hnA2=RmuY+<2d`K=thvCC*6=$$2C83
zX*zZg8g!-K!!Q@io@XdX*R(6Ci#zd>I@7149|H`bx{$9aL*BNI7<{q!@lrPi8JMA>
zhIB+Q%%D-!CYM!)p$<9Xr2uYVM8l|#F^n_J+m5m8ih9-DJu>)#Nwt(4t|^ZU#V%}V
zmYeVeD$y(phTdX+eI@r{dFySuxR%c`Ot-kDSrdj7wFAfHmQg&Nq-##YmZ<=unA9+(
z<0hsV#+$XbpU6~Q$9A^JVydCAlF8?m3k=at;^(2M5N=^s!<>#7;tW$AgxgW5eHB3|
zW=_p%hd7H>7^(Oh<!e&MZQNl9kgps3W4b~f_+o3ydxHTgWI@M0)gTp8Q1%H84;W@I
zwYGIdR(V-Eu4-k**&)@wtZ9o}qqZ&FBHy-XC!BT4+$wR`RO{1CpRAg7hFJFh<Wme0
zs<`bYw(>J9bh;tr_@%d+#Qf6P7q()%aDnNKl$)2II(&sn|AwHKv9rltUK3KdR8TKb
zW-P(oGrDLjeuYY~;56K_ST&nwwYfU4=rD!*^sd#%3qnU1jSp#M&^I*?{=_%1uQc)C
z5sm6+)zZf_>a74g!BbiV@C+%6Qim=0nxe6v(B6duBoWFceJAKmhQlYgmORGwV@!O<
zj0c}jkVt-^GcElHApl{7Fi1~&h#qVNvlwpXi?lScNdHElh;c081u?v&m7meJf=J^P
zZ7B#&5DIp>1reSniuHt|P{Z9s6D8rL{E74YBUB+UO0|t)fHFidL9-~?H2JS)op@Ac
LkbH(l50?J|z@<WB

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/security/JwtTokenFilter.class b/api/target/classes/no/freshify/api/security/JwtTokenFilter.class
new file mode 100644
index 0000000000000000000000000000000000000000..7b09649ed3045684db8207eab62c3acd4246dc4d
GIT binary patch
literal 4177
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

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/security/JwtUserDetailsService.class b/api/target/classes/no/freshify/api/security/JwtUserDetailsService.class
new file mode 100644
index 0000000000000000000000000000000000000000..d01789ef423f6b636277d018719024c76007c373
GIT binary patch
literal 1791
zcmbVNYflqF6g|@xmX<=X2+BiwiMHjj_!f%@C<vy20d4f-(hhWRyVLA$!G81~X(Etl
z;t%jg8SiXg*jA#3gxR@s=bm%!WBTLg*Y5zHU?m72{2Bsbw4t40){^?Z&7GXsFX=`>
z=nl^mZQ+*mm&fiKhuhD&YY5ZX<@S-taE8tz8Ed=ARP%k$QCD{>Zpjcj5Y!L~qZ46<
ziNCnR(0#x?0xPA}JTYLHi=_^YBSSY0>p<UiZDAcG<4yQ^ndPR3o>Wr1!-$}Vp+6^y
zcutzxO`hMYQKP6$5s0{ws;{@aL1Lol)o?kCKJ+sTHj1eeU}z%^8(D^EEPjrAN)q!B
zu3|vLU>HLfZdr$mSTGDxXpiA~O_Q@yQdw7k<L7hb;Z+C}U191e;kZc+*BN4s>}%y$
zkt(&{$QR5Iu3<EcF^n^`F9=Jxiwt_KDS37E$+F@)U_2ed4NPjdsp8yX=&6@;d+(5E
zTn2wEp4Jd&Sd#XE?i5s!_iZE3kEQ*--kTX|bDipGXUpB`)w{7%qoy>nN=7*?7DZv$
zKA)Ic6a6<>k|FSnI*uWd5*FVos@{5S?3rYVrewx2(}pe7zG4ixIpMVKx{KzHa5|LU
zvWV!pW~yi)9_pN7_@a^!soEUuaMN&ww1`blW2tCfekWflR0Yg8_%8ebuVH$UizFem
z`XR#$9;gP|zxemOs|0LGcTE<pY%Llo*yL_bW?vbqS6ptBsJG3{NeS{MTQ$XQ`8(M}
zzv|Q=pz0q_la5_kv@?87s4@?>d?;sCZ!-++6fIZed0IGvnqb+oq+88;EY(szvFFmI
zgzHsEnid~T4oxeqQT1-qQyx|C8m&IEColy+rfK&P0r~?*5?{ckPN8kmN7wWzE}i1a
z);C;xH$8KPkx%5}#|-`NrWFJb#5lcY6PTr4q8tJ`=4eO3a2t0BCWwCA#XW-TLkRcr
zfbKq|^Dv#2Esw}DPnG~#9%F&N+8A91ZO7=x$LDd}q*Z}N5@(o5Or3xwrccoInM^*9
qQ#-i>y&jj*vTKb?#FMYiBVGc09!k(h=AMdS(F^nxOSGy`%fK(ur2jeq

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/security/PermissionEvaluatorImpl.class b/api/target/classes/no/freshify/api/security/PermissionEvaluatorImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..41ab972bb08ead17b561e46d88d3edffe192da97
GIT binary patch
literal 3374
zcmcImTX)n{6#h;-C3PBTsZi*EC|Jt$Mi3Fy0s`e$ozhBME=9%D%xN2%Nrog-DC)oP
zLHq;0@Zw8Z)U~|4@Zj<{x%^I&cG3$KaQToqm)U!tZ-4u8&YyoT{|ev?zRRNljRtZi
zny^iv?VenamMgtkYjpaavLk_Qryb9U&I&XZdu|wL7C2HDn)Je2wdx0vDvwrGAS1{3
zE<LnWRZsFTwC$EPX2+wz@n#Kd7uZp^Q}VspJo0EY(T1G@Es;N2rNJQ?DuG?ao>E;l
zu`sBSziDEZ7H^LHWH*lv>@l#{L?;RY$2{Mf2~;@e%q&{6>R6$&Yk?CjT4O4xIAN&a
zE=ac~BR?3fR9yjcPKINFv*5UDmPb3qk{`@kVO67^31me*@Pqlf9or9-b-otODKB#D
z*#E%{R_#}Ionp^Oq&q!RE!dB@3>+}=Hr^rhS3Q<|&Z<a5@#&$XLV>+2ywxJdwT67x
zWkl)nU<(f6T?1Vv4x^j=#^kOOV&uapP_iPhZ;hQ~*CKHKIoQrTDw^m)uRtzRAv0#8
zxY57N&I>q6LmZ=+sd+I_Yb;P@O{*g0ehe5mYQn-XfjxD|Yw$1^q_;RCBYRHZU<%|#
zHZ|$T@xFl*CO*)4bo}2*zY<7~*}lT_A~PmK`=U<bQzkydM*{gUl0g*SbRuHey$LBj
zQ|%BKG;tbd=u$<_t0CW`yIO@a>U$C6crvTIHGOgEGBnIqR!AP7m^g>?WX1NqNID*^
z?aNvlnv=n}x?fYCtp<Ch3=9dJ+L8rn+bRq<D<CGokY8rew3ZxCU8_~5RWKo^UGB7(
zd|SFVWZ>v^x|xgS9O5}%detf&6xgoIbhU;BZvVGBO`2V{Qq!HDDb|%-Q{Ni#mJDsy
z6G#D*fthmAuP_WN&9yyK7wL)28#cbQIk9z)C{}cNOzPefsepv}ukEYjTjPo`aGggw
z4q1QGoY{y+Gtiu1A1(`YBogZ_5p^Onu~?1cy`f(-X5*2x=SO69CH|UMDzZWQwZK-|
zd|L)Uoaw9_S5~IWvMbw|yVwHevw6G`{tN2lB|^8p#90>tLJFLC9c4N=9=ms$SBk*?
zde*MFd5&tr=>G-ZkJ!;<HHmxJx((BL*eDxNCT1`zaH!6$<1P5}$|}VSQA5s1n^zgT
zQVX-CzWOW6RjQO6a8-I`SA|_A-=D8lx6X()iaO9)@t6NIIdW^=?1i6N9+Iv*?(iyT
zgR`!mt`;lVn%8dt*TfX=w83LHdzot4B;+(z&Eq}-1EKEFyx6)n5TB%7(zGwHQ2)dK
zPj;H_cQVzo!a-(hJ#o!g;4@C#6}+^DJ&(^TSB9Yq4KQI2Z*Xq21TpZ9z=5qr`Ep3I
z2?rU923~O&_(*8t$Tuc`FLGsZ6neM!Da6m5G~g0{_1{1<F7ww+1aJjcxe^%0r<Bsl
zV;pl@?iU!hpW=<*IM3>L#QMF7OscP~euh$Ne+1X4q4!2PYotYBdm{ya5q_im^nstJ
z2YyfFP24N?JxA-nbF_5k{y_dmG&Mfy?d$&?=D-qmbmo@O&T$F5pHQ|jcBmuPJIq&Y
zH`-Ce0lt*FIBEw^BsNz87FPilaUJ6^z#=9vNn1QShML0-&U0vJ6EWzWxft|yZcgw^
zfb;E}0*@%FffxFoVV}S=926Mn@60XZ2)OENfQFiIw<A7gfG_H!d_50jAQo037H~7=
zuz*{*9YZXvLM-t7NuH?LB(R$tZt+WjwdHk9l2;wVMINR@*gfzJ?+NrS;pAf!l0{$t
zGCl^DaP~2b+)v0g*7-~l#L5J?J3gMK$gqZ_6R0}|q66HGFYqPL(yTS1q3awA0AF#@
ffV=pbV>@S(dvmyl3Vf>9@PPYy&K}|szD4Ih+_$ah

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/security/UserAuthentication.class b/api/target/classes/no/freshify/api/security/UserAuthentication.class
new file mode 100644
index 0000000000000000000000000000000000000000..0d966afe3f530e0b769fb77b77a9b657e055651e
GIT binary patch
literal 1523
zcmbVLTT|0O6#llf1VXsTwO&xc3%vkA#RsR@83x61rUEl454<hu5*9<!*(56e$p@X$
zarD6-;E!@Vo2I4GI-(ER?74sEJ7<6V{PrEdW2_D$gFXXU3pw;Nl>NXyR3bc*ho?4g
zNIMixtYma*zY2v~kE0{uN7CVu419)cOiG4IEl{o<Hk9<;L&Z<T+d#cOi*y1dZ0%VW
z5tm+=q<Yf4SB5ZvK?A0RAy^EL{yP)Hh$|wEFd)2AgbevYv3AVga668qXKw_aCmant
zDLP_d6k`lS6t%;{kTBO7CR-sM_g#B8(k&(K;}#}b?wSgp+B7kRX#+DB^0>?}mefiD
zw-1h~6hr@-^kr0K=qnWW3|wVc`Fn$1EN=vL!7y5rzSxRS4upEi4?NP0*8+!odt6B^
zr^;+}B&qkM+CNOP!Z5fiU7ts>qP*KJ63+3qR=&WXpDFG~qTU+BX{Acp^=LMfsO#n7
z9>M#a=O$g`XOdsK84Q-53=P1M4en9@GVEYR(6ETqeWE>Vjy+vWZO9h(i+c==tme~q
zj%etqhX$4z=Ff)ooc6)x-nw$*6AErSQpy*C)~LS2^)g375nzMBY>~uJEnI+wKdrll
zW$p&Ca>S<8Gn~=O)X^6KUDgmWM-Ouf3|HtI*N>Cl>j2&9nULigNvk9=`kSRsU|(S{
zd>|=<Svva@%LJ~|-D-N_25yoxM_&f>q`QUNboR(J+?^@kBNM}&b_Sa=X)HO7<vfhp
zj^JDhgW>MQg6De%FQAZOUrZ}!vhS15&bnXdh|ILh7EwZ9()Gi{A7CHP1uiCm(?k;)
z(?ES&K$*@((q`$u1e<O-t=7gBjM3SH%}d>Eu5=(X+sN{`mrk}ye_h-xeZgd@{J9(A
Ya0kRz2J%n#gtdU>5=i$cQ3elw0UUEip#T5?

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/security/UserDetailsImpl.class b/api/target/classes/no/freshify/api/security/UserDetailsImpl.class
new file mode 100644
index 0000000000000000000000000000000000000000..b904d022886d1672b3e0291da17422f35eb97d31
GIT binary patch
literal 4233
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

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/security/WebSecurityConfiguration$1.class b/api/target/classes/no/freshify/api/security/WebSecurityConfiguration$1.class
new file mode 100644
index 0000000000000000000000000000000000000000..58dbe052b6e0db9066e95551f6e5b74ab97a5a5e
GIT binary patch
literal 1960
zcmcIlZBrXJ5Pk%PJDf}6x|FswX%e7~ffU)KycDO9#Jsi!GPnbE^GUXaEjaExk_^MQ
z{(%0Oekh&kO!EWsqdMI?8%#Rw2OzcQq?J~?`|N6W_4cnn-T?R(#R2r7*FnNVANm=d
z1|i?q(lpfmDHlz}jjXn`vZs7cR!SYZ5C;3I-qOOVFc`}*^xK9qV_6a}URge$go^<O
zNe{Q+F{BQ}vEaT4>U_I$Agh+tKU0CSiwwP)@m&{ph~N_wNu=<BgS3YaG03nO>N+<~
zt%CZ#7Dw_V)Q9{;R>%W=>`Tk5F={S?Aha=ZUI?|>k#%LPK4nOXT5VG_o1}o@$4s${
zqhuqk`SIe7OvE<x4u;<Gv8~(1Ck#UkYnuz4=cebTvh>d_%;e^tau>s0o*!0)-w2I8
z=iTe_x^nZ``7FtO-sN@WI=qJrgONQ$2G1{iiY_mS5sW$*^Y8_}WO#XVml^H|-w#h@
zZCk6l3JgOz^ZI`ZuZs)=qudz5gonw<g>&nh(l)}HiCABGn7Yhbm!c+h%*uMmVVbTe
z#$3>{CIhR4PpH>2KfR|E`1)Fbr3&0UuAUd4)C{wkYt-BLE<>Ua)+EE-q6*|z>!>32
z52E7JPP!N+*sjnjT6Z=RQF$}WT;14ME>EFsNB)(F%F<Gt$uQMgRDGR#qn$$LX4Q3?
zkNk4=ML9pesXm60ofh5wk=#{AQ8X?bcyZA}2>8gq+KKzuRv2uxe4j#)EQKvym8&X>
z@%{g5rBhMMq2R0pRX;S;a@v7&u*#6Ta%1(djtxrxD#iJ7(yV5#lg0l`K61+4lE$u6
zFJkaEf<WqmFN~1}59v*DL9YQ=Diyse^wjjwcMCH#&l0srbF`D3nEZ{(^>;YG#%Jbe
z>?cW}j(Hk~+Nbah7HCE1V{Ht1qWc*7eooQhXY`Ks#%g~dcBFQBGJX3DcilhnQMot$
zajBe0e_AT{r9Uf``_uPJWhechbcRQXHvciv<Co|si8JuME}-Gqfdh=<5FDC}8!W-1
zfYv3D%NHP*$-O1Q)d9IkfS%LmP-DUiA`*B>V-LwM$Ey{r;k$Te1>e)0q;ruM^!pqC
Cm^rWj

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/security/WebSecurityConfiguration.class b/api/target/classes/no/freshify/api/security/WebSecurityConfiguration.class
new file mode 100644
index 0000000000000000000000000000000000000000..909616ee0555de945a98ad957f52c784e4327348
GIT binary patch
literal 7885
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
C7$K1W

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/service/HouseholdMemberService.class b/api/target/classes/no/freshify/api/service/HouseholdMemberService.class
new file mode 100644
index 0000000000000000000000000000000000000000..cd22e03dd580dbfbeed179df92df58f4027c7351
GIT binary patch
literal 4455
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
Uet}=(w_Hhc<#+f4{)F)l0LFm8N&o-=

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/service/HouseholdService.class b/api/target/classes/no/freshify/api/service/HouseholdService.class
new file mode 100644
index 0000000000000000000000000000000000000000..43c8ce175f3a2e6ac93c4231a4d07665cab330cd
GIT binary patch
literal 5145
zcmcIo`F9&v8NE+lq{tInQArxxZLP$P>m{{P>bj+JOcOh9;@U|XCytx2jir%2u{<L*
zBPRw5WnW7vWhrIfw*m!fvH)#?E*uVj5{JWmZ^on1(l~GqKUg#KmhZdY{kHe~kAL5I
z8NgxueFq|FilSLV3t9yREIXYq8P1BC-$?64Gwm3qbu(+EkK1L(Sg{Mad2c|VwO}tV
z8zq6{tX*18JB9q{rSz;C%Ooj0reO!-0=KW}tHz{lWp($w>8|k2adpde1a=S149;HC
z*Y$Kkx0ciMZppNkGi}hYGm3T%9Y_cyYK03ln^xYI+v_(EE=Yrt8g9ee1a4c|LVd<4
z+K%bkr44~Yv$aN+g4v3ll^vNl_Tcs?_G;)vmq2?3@~mww3q;rTLfJT#r^0HB<TUNM
z19wJomxdms1V;Wl<pOczis`t{(Tx+i8k<ioT{5z6X7EB10x`*3uZBKJTJvSSWJS?0
zFj}k5xRN!Bu4!8pQ%~CNv|YAx$F`>8IDi2SgBYTl$4$$0Cj^=XJaP|exCbKwodLOX
z#@domst_hHc1sl3?ju!)aBmcE*Ki+38(?qbr&=Kb`|_rh3*yzACw;+)<Z*vEc9fg^
zNG!W%Aw5gN8N(68WHddX;X%BEerE<$Svh<&E6-IerfC@&1>*vPwH^ssRlO;RCd8t6
zr$D-PPsNLJO9KZ^U_i2YRKujC@{Y!w$jv8mZ8(PMC?3&p94EHoJ0OA~;J772UlZsa
z2(#pk%CzMq>1xKK8fGyk(4rTM1!h`L)%twd%BsMd_FqWKDV&btF%4%h&q|>ZODV3B
z&DdMhivkb&PE#xDrM)#aspp)A1)Qfbt}WfmvQ-66xm>2|;~FmDqQI^y#=PviuR+w*
zdS=be8HGx2Wny?Y>p~EGDa&?Kd6{i7yq6#*NuJBHmkP2;g3vWAA<H~=^mRj^Kdg5v
z>qEuQABuu&d$s`-11nZ?$|xAsYGW{2{*P2}q%N~sr<Toi!%CUCRL(XW1zwdS3363K
z0gQ?`4K`fkCIxCC2G;B3xniz?t?$=RlD2Bn)+1JKx=?mj;&3q#MVa-#Qf)mm<G73~
zQEX`V06xf|sqGKbde*D+JC+UC>qi0y!VFFpbjQgI*0(L0?N4a<Fg_x%Cvb>YLFTvm
zUVZyu5>@xesvQ~DW+IWP#-3N{5J7@*LGvV|MxbNXw2YHwSxwLCO9hUww`TRif?hJ^
zw?EkIu9y@xR9AlLfcT)Pp)D{+mOn8guyfwkv#WD@(U%$z%0Fc%<_vem&Yjjv`Wk&J
zk?)u{mo42bmk4V-=yQP;<8^3iGQlGyGeIyr$w!b86x~`Ta*1o~e~_yrcGYBSAYDpL
zgi=M-dKweZ!G5tFaw69BT&1N5Obu+iXK>pUth6%Z!*V-H#+tou1n3zVWMqMnQI@$A
zp6CcHIHt}A-qH&KuhnC#i;L<2twS2>NCA{ed(Yg`dQZhI?vlw7S}HA$&)elv)|fVB
z8te{W_z^uKs{+p;XUdjqt{DraV=_OESgfurF+5_jmU;PIl!wZ^4CBjoX*KOIm<`+A
zC>m*B6up}`YTGVbj$ZV_-sxz?kK*_-eiFq`<uUeW0)3S_WLoR?D)+1Ns&}#tiq3Q4
zLgO#=gdW$eT)}YqW^H@5T+D=G(i0ROsoHp!V8fIC@{1t}4SIqvVp1;@=1tdNANmE$
z;3I~s%DzlECuLf-<=)IaloBz#AaG|uxz`BT0z|lZ{W>Hq2t_Al=TlPl)*dD8MS;E2
z!&`%4L1g-Oar_=HMX{;j54g&+Ssl}}`r1-XCyjc3tGKtZELFb#`TuAArY@<P^c)@b
zSk<(0XZYSz>!}2?9WA&K#~<;hDE_SBWxPVNx9RI%zOhn;YpXynPdVG{%p~v^ftmWU
z(YSzbFOMKjSe8*zeb#WIc#ZJuoZ2WWqIg5#uA47qyYNy7``E5s-ZWc~ls%hoNqO&6
zPhL^flP7oe<n5Nv7%xgs;-fsOevDtw@O<6G=hV<k5Ir{#1+Jql0)Fo5xrW`>(H+6_
z=<=uc$?5$Oy5+#*S8?|%93J+Tr6YKea+>gQ{_Y_j@EX>^OH>c~iQ{gJVF;g4a}oYd
z;gk3jpYrX~_zW?9mhVjvWB43jnmKR)pXXbP;5_gJ{zdQ<hrbwL-}JFB`rz)bU?1~9
zJru@%IKVzZ><@>qABoVaDS;c9k!w!M&$A+APe1D)XhjFowC51t?xj7WyjR?hIli62
z131s`ihYZLeT#Uyv3(O;_B|cg_a)l*3@*|x>6<5MvGh%!bjI*?EJiSQ@J;NI<|f}&
z<%ff{+-J~+apFCUE=*uQ9#+^=p1c5CAG!T9b+++V|17>jebNhzkbhx+6uHK(5cn#-
z#-$RX?nCTWnBEhF4$;0Zf>)87Q^+DJD%zFyDQY`LebXUC-2tL*g@av<g1@d1`9bh3
zwFx|jZ}{Xq#it}^Txre+nnOYB5w%i9l%&#Iaw&q}a=#a_T`DzZ2<=gH^8(jTw~p|}
zl)>qcQ^y0C<JCbs@>WbeA29V84U&Q1sqk6>UNTiwOi2%VJjK<*d4f3`Qr;OT_k1O`
z!pCFgoA?&DNuM0`nQ5=s${c<n5Z_83fyI#M_CR#IZ&xVucw5J}ebG<wDKoow=qj9{
zWaJvwHz9_GH}RpNgPYhjbk8P+hdP@#F($bUyL~TndLMRTuhKi}i3#-fs^TSa^{VnE
znd+7QV^KctmH&L;eu-*VGnXc~D8cCjClZ|aj#Bnre2-6Q-uL<Z0ss1_=7;?Lx%&O3
e`u&yq{SBSpglkOnSMgV_jC0lB@H*Z^=YIfK%!E|{

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/service/ItemService.class b/api/target/classes/no/freshify/api/service/ItemService.class
new file mode 100644
index 0000000000000000000000000000000000000000..9a4fa62cf4093c177a32dc571db32dc437125e00
GIT binary patch
literal 3031
zcmb7FYg5}s6g?{xgpJ}56G+LUkhd{lwRs1pd5}N@bsz!aG<`<cYa=2gSCUEj3;hNC
z8EvO|(9Sgd)|vjMPN#QQvTW>_q{AS2wfAxEId|{={qJvo0Qdy;1QhgWP<8A>FT*Lv
zH7XwW*R9I7Vb(0e=iZi8;>LWyH&?>n3@M9N%e?0LR^WQu3=@TRKQG>uu1({7Kl+f+
zkkru+onidFJsA#FET=4x_%qx0+`7-#UAxS1A=8n5(=Bt`h;8!Yg$;AdH0pt68wJY`
z@(HAHK*NBJgGe)swWA0F$f^S~sQV0w`NiVw;_A}!6NZyr5;pB+nTK=?VVL3g+i>4@
z$}3UmNAE7+-3dENOyUEKXgH$dD2|b6k^$Rvsz$+estnqeY1jEug<&wW5P8Sj690!f
zMlr_FC-Bc~&lA^~Ovt1(Tw2@UrC=AiOSQmq9n;PyaT2FAoYrv$XBpB>{u?F?y{<QF
z`<&ry_o%IjG-Mc#beBprb5_R$CMmY<R;%2j%mvr08oph*xIu-BZ}~pthz}ta=^l(#
z+`3cl$4B^B!+9MSaFJo4-HAbcZh8*GP%GAzz_Xlce!QsRGK0|$jelR_k`Q?a7TsV@
zq?&DfP2v)+>bQn!!h79vtl$PiPiDNBq(ZLibUta_U*&;-8uC9Xq-syoY*s1TEgiQp
z6CD@fMy(bf1%_Lhg)R|dBa(EF9DTUUa6-~ocDXM(T;n!1)mY$;tv3#)hB=0t?QwQf
za+myxmKo{2>c#+CD4NApF*4?LEZ{SSBpqxX@Q{sNS~R+`D9rEcSQLGy`sNl-;sLH|
zcu2A~4?$?2#0pk5Jkn9bV}`@+vd@{NaKt4@hOm7Y&a}3`9ozJMBCOpr&v1}@;*tbk
zG)B}rG@2L=6fB1?);HI<w`#80^o9DgWZFg3v&1_3s0Qm6Ii2Z{<1KTU5+-8uNuUm&
z_Mu30+~>i%TYg}A<|dKqi7~fgRUMjm9zlBe?zz-Hb*^{GDyq-lh&Y*dwzwl`jW|&(
znk;OA$g#+b;n-e581~cLEIqq#)*_OUakmiu!!5^Uci*SN&Jj7o?osJ16{(}@wXzv-
z@ttA1TghU3?_)s|)hx^Fi6Pe+ru&U3L9DoSuf*pp(Fy}1S#;axM8`6WEZ3dD+T=yc
zx2QdCJ2bdVF>0ygOxSxhF^Vce$>*;3%<xH1?gra6ZbYH-I6-se0bTqG(&E0SUl7xh
zo_%2W96EaNgjP4nLZNqm_E)fp9cT)EqNRc_=-ErAzzDvi=Wu9-ukbak$N}HrTiSn0
zzxOd(04Dt_Sfh`nIQ|Uf5%E(p{x8_SgTbDT6vtaqq~a8*y;9J`j7s={-YTWYi4>!+
zad-#E6|k2$@h8qLPW^>p+89qy?Z8m*J1#wWg)48SM3p_V%3&f1MA#7BV<R|))AToq
zvl7x6*-+#dQVwNsDsYG_E2z@$I_(ps|6o$XIast(Y5!7#moj}|*nr?c@ckogi*&i{
z=u6}uOUQ)mriy8GL~UTb6Jebtte?IaQJY|oNG-GUoWvle=;F^2WP`LlF9BymDmnm*
zB7|T)<aJa+SDVl$8qj-5tJw&ALZMnAg=KgKo3=y&a}+{wA_WcEzNg@4`V#hxxX^&h
z*pDk+L=72yN><c2AwQdNqVO~HZuZL#3JOTY_LiLP5?V+Sw`7GfFu4CS^o{oqeGRn;
z^-_d-F#8Hi*|hQ+%P%mVop=G(WF{qfOOrsu#7?>;&tNRqpggQ`3HvZWk-wut6nOCI
JEskUW{0G~|-wXf%

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/service/ItemTypeService.class b/api/target/classes/no/freshify/api/service/ItemTypeService.class
new file mode 100644
index 0000000000000000000000000000000000000000..fb3fe697c10e788be03926c1070bd8d2da064a85
GIT binary patch
literal 2297
zcmbVNTUQ%Z6#h;K420ogxU>kCRG<mrGL>Szgi--P!H`sfQR;O_PQsy+nXH)!mA~Md
zkNyi?%U-Z+S>IgC-{f++&&=dPXhnUQGiRTD`S#x5+2@bHe)$!^9q=B6(4io#q7z*V
zansUDHg}Fh=~UCJLUXu%A_`pFc6nw0w90e-o*^m%$sVs-j&LpeltD|k+uM!PhKr^_
zDuQnGD2S-&h04%>te@zbp_^qbZJA{T<wQ4XJX>NIO6<(0&mX6H(T@QIgDPG@lwsjN
z#b)R(3A4C<x?N;QBwBoD5081lO$Fg<t}wK0)fJYh8w7Y5BML@UT)|Z;f`{mw3PYD=
zZyF9~xbbqYUXDQ^1+Ow(YX@Jkiri?_Otxu4#cQ}m{tc^K<~Bu7TXtD<jMDNk)l14!
z-H1`GWV2!}bt`6CZmeY0%wjKI$CQF;6*IWOFxYO%5PqoJCc{W8=$vZ{vz(gED@ZWh
zYRAaGEpV?g4V)Rv-IC!p>n9P!kyJ5<c>=y7OyRCFbR=f;vU!UtG~A>%%TBBr2Bnl}
zEqhuxuGi%y6}Pa=Fzj&ME*#a#xPF?^D^%#|7h(20>h&h@a~p3dcw5Cgc(=~A#xa2q
z&Ss_R5{n7meFZBF%a<qYyddKgk`dfRQo(yv=_YCYen+s54F&J3*u)mYmG(|-=>`8X
z^_02mx0PY0HNy=<cO2qpyJd=DfNYx8k<^}&7pFas^W-AC@CMP1%+tc;nOfzL+xz;V
zK@#FvK{xWcE#y8BhTS9KFkJNel4(H!LV~cc9lCY(xxo;-99Lh?)e8@H^=c3~(jXSa
zAKc~ckyX5>+r$Ew+a!|t6OrmAAW2V7lug~O*_6!k1$M1m24Phe^*rmyY1s657j2mu
z!Bt`ClnF|7?F3{PJzq?^pg~$oZMy#o)>bPg>NoZOI9f_vsKP&w?b$p-Bxlv^0^bsn
zCByZC2hYQzBt65}Ud?nxh3ADMh&^j2jU!!7QYufvr*Bmbn38PZL(6`kIn+jO$<d_+
zu2Q&8v+pjwRv|>?BSn9ZgOI*qFnoXy(SdE+eMf7U*2Uz{V3SXwoS`oS_83FIVJx%o
zJ4WeXJUV%X>mfWt{NM>@pD+AK79H53?<jef-w~SaW4MZG`p#n<ACWXhI^-E??9wX#
zGRRW&5z@JbkLh%eq}^bDVqPIxj&>4V9Q*Xw$w(cv{RB5D4GDIcc8u1D1bc=B1_>nO
z0qOEiCcVI_uN4H&dpe(z>@)HZ_B?%0RuWuXdYU`K8zJn@pW#i0AJF>@DN6Is^X8ch
z6ZXPHy=qO-(>qPC+6*QLZ8O(+BiA?%aGyf<lE&xwg2H`CJ|r+-@)b!M*-t3A-N-&w
z&;Ec6eC%J7*&Mzh6Iq2Utsz>6l25RjjE0_K?GeV4bC1A&BC%hNelNWNLOX;$40sqv
ceX|C}A&(iX9<LLFq@a5)4pE?0*0c!x4USn#@c;k-

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/service/ShoppingListEntryService.class b/api/target/classes/no/freshify/api/service/ShoppingListEntryService.class
new file mode 100644
index 0000000000000000000000000000000000000000..f32a5b75909ce012b75509aeb5dcf0e57347309c
GIT binary patch
literal 9166
zcmcIqd3;<~b^h*Xd1L9t8jm9z#j!PZ<X9R@R_rKF?D3{3b}S<=vAiUXp?%goNn?-Z
ziJ6g?LV=V7sA&m{F-b_EWeZRWgkmLf0C$71mF{%k_m(cumQpYY-??v@H=D5g`}Gg&
zZTFmemhXJ`+&liti<dtSV5{1@01-48Xf)A;W`)~wPXBn`E=*>|&-Gi=nf`*EKb;w~
z`$s38>FG>vVkA>2?#vbQ=SJNR3e8z(V#3ZV#7CU`M1LVWK5(*sM88W#5mmT(FrB7k
zB2%=d5=AFb@KhzT)YXa>v>Gr?+<=7&u}T#RjhWoIqtM<xa?(0&^=GZzME__pPmQUb
zBQ1zwk%730#kf&nO{Mu$PTI~^8?VqbVHbzfG`hPdq<6%jRtd=x6HD<jg=N06f!_!1
zX{V4WI{9-7ca2oemk+*HPg;^pwc;i$GjOws<yfJx@&Beqp~XJS7#8k6C$5x5X#a_m
z_E<61b1aI4!kvElbj%aBBrsuR^R|^fmvD6?GPy)?(yq?VDigOzY8ua2`J92(3WJsA
z+Goe?>0-voRXaWCPO?+mxziulf-bBv(TyJBXG<oRDQ;6}=<Ycpfmv&!7k!+tV4b!V
zZVe~icPo@L?^P82gxcZhv{e+a`FRUDELd4@VuJuB%JdI8Gr3|525^UgjVA8IT?z|J
z7!xcgEXeY5#LCXl5*oNCip>f;hI6N_Y$ly>rtLiEb8_nvd!4+kAznyWyvy5D&S^W%
zkXktjZJ9mm3~W)jy?z)y{llynZDlBMDXftoZ8xz4gLGs(lS{k#@2(%HnPMi}zh9@w
z%BET{gnJC^G_gzK9M?XV4PjQC{LXB_j$*gM@>=N0ImN^{BbYX@M`25SUwq-9g7!JZ
zT_PBAY8Y!IJ9|y+!+r&m+1c&P6zoYSOJLu^8m-jt7IrX*KE-gKiGvuWc%e+ZtNTYv
zyF_x>#1R}-FgX38bJNWDs=6~vYGjO__yH5g@E`>_u`75>y*UFpcgk0ocqM*}h0G~Q
zlQvVSu%hm)he^kJM$5zrj8Tp=26CPCCe>mxVFb2`aS+#SoG_djg~i=_JSx;skaUs1
zGYWeK%hBu6$C*rVGBJ@kZId?`h{PGIkO)BGvx)nC($8fpP9bYx%0v$2bhp}q>4>^Q
zk(@L|-t}o&e{|mp>+@qO&Xwy`Ch{ndBZ_vRsIao!_VJnAn5Lrxc{`mMvx+tucLt{o
zoH2104Dr$u=F61Rgz-$aD9hO<ubi|6H8h5URi;DF^=cEZ!B3Juq&|0L@?zzZGN;PQ
z@pUF%kB2xsQ=rWS611k9V^XSbF!3-R;WJaFaHFq8FN6X4y-8too;(S&ySZ>z;cHD;
z6hF;{<zBm3O{%g?zQx4P;AgpP2N@39f@D?E`K?4ywBA?(`cb^iz}ro{1MgJmuB`QX
zf<$pJue-ny5JUpkymt}L!8|2c8hE$DK&AfD@)d~G;HZl(@jhYVJyJl6T;dHRhSO0z
zMc~$qm0L2h*1XTe&*A4u6<k1O?ET~6y3-leEl3m}APwAOXKfvKt5yNVq3|kM3O;P&
zX?%oSz*fgD+VeC6N8-%c$4vYJKF$)DvQF7UPLAbql%>qOLea_<Syb&oHHDk4I2!N?
zDZ5W9BzzFoD~>oC@r;R2<Cj=b)|j*h3J0tC$xm&Vio)$>s*IC@DimX9rpSd-)|X7o
z;#r1toNJafHYw)0{Xw~Pflv?Q(1ec}xU6tfB^ca=MQFMObFwVW;Q{$`pZu`|^uKK4
zSMaL}tx`%Jh80%V#k=S#LH*b91p{9+@dCcYm927iKOP|&I%cKQ@<L&Abp%WHrs}Pd
zBFiF+;43D+imwr*E>fz3?n0-jd(R$OEWVC427Z&pUFwNkx-szE^O!D+jpuF)eiy%I
z;P*{@1AjooRW|p#tTDHdUO;Mdw+swqxQ!XgT7?1~tCZC4{E>-27I$uxR!gJiki*W2
z<jL+lia%A@>AM(e150d>I5U~a+6hWa$2c}=kDX%2mSMCCvQNqQs$`Gy=O+F_y5J@|
zpLg<6{FOo~sQv3#*@C~3eaqjn$}1sIN~qgP9IBUd-?yN#stbVXktE6?ZjH#GBbl7N
zZ)WO*oj+uq$np)habs5Yh?URCv-h&GIGG_cY^V$JswsTLlPL?8dq;(OP_0svQn+EX
zXpNoPYfXE$v;>VKEsE{6i<3_JfR(qVNPc;~S~??}0J}<+Lhp5i@(BA#S5aC+i>)@B
zQSY`>$iHd=mJhMxX01<(s47}+ZmR_8Wb35gBgs}yv88SiAc``1vA9qX!;CG?hiFds
zYs9DS$ypPjPeG@_7Nk76)b0f}6&f$9wp_FA+i3mvkhDMB^=ViznwiL1#hE-2xGh+J
zG=X2gIUV)V!$|gu^4c|5GcQ>NLuXym&_r&LjemzQ&R{k><Z?!ccH9nx;AxcfaYtHb
zE<p+dr`TVs;TrkXJNgx*#VVsp#|W|>RQqy`M-c43sa?$QDwU@vHMEh;_4!X|AkCI0
zw2G4H1vLhw7^v-?M{VV3>ONmxq}S+DRj6wjUw2TIDLu^Ms;o72B5ifm&3D%Z1=f0%
z)_RpLN|j)|N}|+-R;9eE8)cX_&Z8i3rIuiq=h8eqK-c=~bm|zL;(o5%Q(dq8JVNWb
zjqEn+%;d-HU0i@e2Mki`y4XDMtdrJ*<#v!KHJK^<NT!hCnlzZ>K2smNkORA2AWqAH
z;J7RTXPo@0{sNZ*+mU@~zo&{Ji{0%wMQ+usX?M{mv^A@)7PVU4YN$1)>Q+5Wc&XXp
z`tO{w`$seaC}EBJ?Mf?`n$pwP!VQZj<W8{L%B8b*p=-o(PR&ev6dUfTUE0)d$^?b>
z!^5xrqdVpNvf&d?PxFwK&5n|>QZcMxRC?Jhsy<UKSIc6m|N0irW0YSn@*7NblUl~7
zffjX#+Gwadx${swWb3MmF?aS%pSu|en!?Ba|KsY;n|d&mhZ-l0l`)Dco&j#!`=i=M
z9*^Y{lm4=v(B~yQGgNI&Y7396)K*h%Q`=bzWKC}&k-b+qI|OXjwsOqMM<{i-M0Lni
z?P^I3--@bT3hO;9{PrN+=LQp&HM4AMhI2VPuRCkIV94sTx+)>H@N1}-vt6BkD0h1<
z*s+rPjj!{hrV(*DO6Of%woUrVpBnU)X9v8-xRHGUf5+|R-}C7L<s!TeB|ifdH|DS)
zg0-_~`yy`Tn|8UKLq`OUV~HNoIfs=IJddsip2e+K^pH6uxl2RrQ&iJ{f8gJn^n`2B
z$|L8c=)o!^(TBCTgMa^#-<P;k;-B!(eB$Kz7krau{VVSqpzgrG@urb4y72G3Yf}6U
zKK=*3<(jS9__=}a9@R#z^Uc0(7Pl|B@RVokCePLsZQbhHs@>TZfttnLG<k3D3*Oj!
zy|Kd_`|>Mvd*lVQuI=S@76<rv$a_3Ai~IR_+<QDeiytoq;pj6o$qm6q{=fpPX9zYh
z1h+E;0}R4OZ0EuE5bol^>n5IlZh?)hC}JDl!1Lv|Vo--C;kp)t=TUrHhi5wu;6Hg6
z(ShPmNXe^MYaq68;X)m;W`0Rw*pJz_b<F+?|Lw)BnOB4Fjwd^3k>1?Y(d0WnS>}94
z(;QCnknb|4!A*EE!aqO3=BK%%c^0pI9Hv}<N)oPv|Hd+5>TlE-SVz~v6K?~%VbZ9j
z*n>{G-HZJU%K?VqAYC5im%}*3PzWvtcuqk30>_WzJNO^wUEY0{cVhox{4c)8ad#0M
z-^W!V?FalWh;qNZ7<_w)-vm($5xI&^1E;Q{$6)XUToS5_UZ{xp@9@=k`A^AdEgg``
zc!<*p#0IpNZ`Kgw?Rf_8txtHUx#0PJk*Il0BaHR&cmqnMutdA`AcJw7M!te|`brjr
z6)J;)z}*4QU9Sv!f-<=1r<8U|G{{Tr08~VYg<|V3^4iF2O56IRZ)<z!b9nC@i1&Sc
zI(4nQlrmS2d5XK4bF0^;$rI>61__*G9cKyRsSrF<f!Qh5sI$~TkV{4ybVf{C>b`l2
zZ^Wf2)Kzr*8Ibb!p-Khf7!ON4f4<MFK=r8h=l!lfK5Bh*ey}Dw7gMBtrS|(n5uVh!
zv{mk^l&R}$l4lJ-fxga=FwYR7XNjwG<f>QG-`5Z=uO((*M|?gMLg>-J_oD$qkLoBi
zP|Hpap=;5rn#vIBeiMYc-+Y9ci2MLUL@0w35AZomgbMw+_;h2Wnw8<j=pA%H;<iCz
z)Oi^nm2hyZuI_z(I!c#`47Y@n96?mh;WH7GSjt7`!)U`JXvdpaoNs1vzCD!Y4S}m0
zJXhQKBdU~ODb4Pi7x~8L?J!`OSRNa>MypNqJxZf5ct$_x8_lEzVD-p3%uwa|YuMP_
z-uy^M(=3GWFFc9O&tr}y`21$0!;sfx>Cd`%r0>tUcckjibJi;z#w>pA=)=wG>6bp2
zTq&d5sALvjE`?<?IYXAlHoOa~nS~_Y&9&<>QuTYtUQgnFJjLIG-piVJA5Qat`SpDN
zM!X;I#0PZfwvk`%N4JWq1%&Yq>{2bNmG4BSzvf*~rpIj;bYL4elcU$cCS5IUXt;{4
zWcRDA_U{o?K5dm?K@FfROGn+H7BbF41^v7VM>I(t2oFUx9XIQjE3|o1njGMnqEwrb
zo}g0rN~Lh3mN34d7S#||mBOoP39GnTTtoPLrEpg*VaE4HIwxjN@hYXTJozksBN_j#
z=kPn1ppt7Zp*`7q30IPRmvCOv>&9Xs!3Zp)$SSVV%e3;Os~||va@|EqoR;f8N_wQ_
z^6Lv_r6_M`;D8uE#rQH7i%6H~x$;?tR@Sk;B-vK5MdJFyr;*s)D4>u3$sGPnh$-eh
z|D}F@hPHtVWgAIRuAPLP+exg_1#_P79_81!U=b(0nfINvWhHxtUc60vAdBZBw5p}*
zW%OmGzU$Cl^#xw_1$5O%YWgN;5Mpjc!+rz9{CClewa6~Q^W;8?OQ_=PgT#>)7oLF8
z_%s?DKF+tUc`mTdY7^YPF0Pr70}xj?2klA|BC#Ec>bc4B)F1NHw^KbU_OIuiVSi|b
zcHIrg4DBi!o?-D0o&>2C{18!{D#0twQ!7~^t9ZYW|K;WuG^nIntJZmUxAE?Fj@jfr
br@Sva)S$XYf7z+-rECkw?B+S)2s(ZUH0|q#

literal 0
HcmV?d00001

diff --git a/api/target/classes/no/freshify/api/service/UserService.class b/api/target/classes/no/freshify/api/service/UserService.class
new file mode 100644
index 0000000000000000000000000000000000000000..006ca0eb9a2516841f003748eee55a173cf5f8d0
GIT binary patch
literal 2196
zcmb7EZBrXn6n^d!SO`mqiJ?NP&^O2nuvP0@)2e_(iy^6`jn=9&m*gfaU3N3O8!CUn
zU!ybjg*u~tbH?A~IG($^EMXa#I+@Acd+#~VIp=xKxqtur@^=7t@WU7s45>(H7{&<0
zRm;{pj&OI3&VkN*hVBYy-)IT_0ev)rZ-!K#c3YxnyM|{w2MncZ+|P+_eb-~-auTB$
zQ<2m#4vnyO`99Z8ZguslZFL#ceQx$ey~B{rZxpI0ugl{|VNyj}!)wSe6ka(l!)V8_
z+N%e5+YI^q0B(JISG2rx7^?3Xre5!PhHY_^l6@UH6;m26;0=b1pUnvqh7sFYH(kLn
ze>SRLUl>Tm48u%3@jbgOOrI+$$t4YM;w{29?QT~%6uD|UUEMW1H+P9Ac~&099MLC*
znX_zfu4DJD_BgKKs)}nGu4A4d9d}|#JmHSTkQ>ak;W>uYEf<<9@(g-BHSuFh_=NcB
z)oiaKL#-d3Cb58`h7uMj-`j>|cpozi<qJ)z)v^X1HyFkP^4IscVaE7BiXKREf?Qwj
zcQm{!$=6)IFIKE}#q7H~Nh0Yz4e#Rv!tM%B(hz7nE4wCM!ZEu(<VPBAq0EpZ&V?re
z#}kwsHAOQ?Q&LnxC8dvBF}O|QQ>>_1)v$)o7%s%guJBec9%GbXAR5E<LE_g;?z+@@
zaZgGuu|^HSFj+M$QS0w*3+F!HHtB>qp~cN6cMQ1?4-?*w;S%_%!ikpn{1Uig&=9Z<
ziXtbO;nFF;0m2w28Xj*w-sHV7S~Aj}Vx~8Rw_~^Oafj~_mku4JB0)mEZwwY4>3xn!
z48tO5mCV4ThMuHb%MsiYQgnt}`SY?rw-*Sh-)l!mVLJq{%co(_e$)z0f@;`(rzI+e
zR4FY%8UgvsvT+!uxB8Z6?1`q~8l>EcMN`Y=J41}+gBIw?IqXOxpV-c0-6cAO?H%-l
z9zvCInHv8Nz1<2j^2zqU=&7J}1We8YhOkb%pJ+|cx?KDfZ1x4zLrf@O&yf8S)3v3)
zFhv&^GqZ=dtl&2+JbaGAA4@-z#}F#?KSk(37CHJ&)9xC*fQy*H=X5$pHiV2XaF<s3
zwSg}wy0olflWuEtItum=7F9Z{(=I{x3%EyL!;H*9+pn-iWyoYJv?{b_WU{40EJc~h
zgcLs^SstiRnZQ(F9VL)K1NZ4Zgl~`u!vi$QOv10yD&bQh{M!nMggEq-0q9f&o$@P+
zpsPOg*Z&iG{?(zsi4=SkDwr$IKEuu0v5p@q@P!I^N%>+FN&XVawKyP9E-E4y3N(Vr
zP@pp;DdAzrSv}+|TYQe&#f<U-pFG9IV(BT^FT}xMY>mWCV*=VhmDwnE)^F2@z+o~~
Q@U0K=2;b2vh5a7*57{sLMF0Q*

literal 0
HcmV?d00001

diff --git a/api/target/generated-sources/annotations/no/freshify/api/model/mapper/HouseholdMapperImpl.java b/api/target/generated-sources/annotations/no/freshify/api/model/mapper/HouseholdMapperImpl.java
new file mode 100644
index 0000000..b0120a8
--- /dev/null
+++ b/api/target/generated-sources/annotations/no/freshify/api/model/mapper/HouseholdMapperImpl.java
@@ -0,0 +1,43 @@
+package no.freshify.api.model.mapper;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.processing.Generated;
+import no.freshify.api.model.Household;
+import no.freshify.api.model.dto.HouseholdDTO;
+
+@Generated(
+    value = "org.mapstruct.ap.MappingProcessor",
+    date = "2023-04-28T10:55:48+0200",
+    comments = "version: 1.4.2.Final, compiler: javac, environment: Java 17.0.6 (Oracle Corporation)"
+)
+public class HouseholdMapperImpl extends HouseholdMapper {
+
+    @Override
+    public HouseholdDTO toHouseholdDTO(Household household) {
+        if ( household == null ) {
+            return null;
+        }
+
+        HouseholdDTO householdDTO = new HouseholdDTO();
+
+        householdDTO.setId( household.getId() );
+        householdDTO.setName( household.getName() );
+
+        return householdDTO;
+    }
+
+    @Override
+    public List<HouseholdDTO> toHouseholdDTO(List<Household> household) {
+        if ( household == null ) {
+            return null;
+        }
+
+        List<HouseholdDTO> list = new ArrayList<HouseholdDTO>( household.size() );
+        for ( Household household1 : household ) {
+            list.add( toHouseholdDTO( household1 ) );
+        }
+
+        return list;
+    }
+}
diff --git a/api/target/generated-sources/annotations/no/freshify/api/model/mapper/HouseholdMemberMapperImpl.java b/api/target/generated-sources/annotations/no/freshify/api/model/mapper/HouseholdMemberMapperImpl.java
new file mode 100644
index 0000000..1b60356
--- /dev/null
+++ b/api/target/generated-sources/annotations/no/freshify/api/model/mapper/HouseholdMemberMapperImpl.java
@@ -0,0 +1,60 @@
+package no.freshify.api.model.mapper;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.processing.Generated;
+import no.freshify.api.model.HouseholdMember;
+import no.freshify.api.model.User;
+import no.freshify.api.model.dto.HouseholdMemberDTO;
+import no.freshify.api.model.dto.UserFull;
+
+@Generated(
+    value = "org.mapstruct.ap.MappingProcessor",
+    date = "2023-04-28T10:55:48+0200",
+    comments = "version: 1.4.2.Final, compiler: javac, environment: Java 17.0.6 (Oracle Corporation)"
+)
+public class HouseholdMemberMapperImpl extends HouseholdMemberMapper {
+
+    @Override
+    public HouseholdMemberDTO toHouseholdMemberDTO(HouseholdMember householdMember) {
+        if ( householdMember == null ) {
+            return null;
+        }
+
+        HouseholdMemberDTO householdMemberDTO = new HouseholdMemberDTO();
+
+        householdMemberDTO.setUserType( householdMember.getRole() );
+        householdMemberDTO.setId( householdMember.getId() );
+        householdMemberDTO.setUser( userToUserFull( householdMember.getUser() ) );
+
+        return householdMemberDTO;
+    }
+
+    @Override
+    public List<HouseholdMemberDTO> householdMemberDTOS(List<HouseholdMember> householdMembers) {
+        if ( householdMembers == null ) {
+            return null;
+        }
+
+        List<HouseholdMemberDTO> list = new ArrayList<HouseholdMemberDTO>( householdMembers.size() );
+        for ( HouseholdMember householdMember : householdMembers ) {
+            list.add( toHouseholdMemberDTO( householdMember ) );
+        }
+
+        return list;
+    }
+
+    protected UserFull userToUserFull(User user) {
+        if ( user == null ) {
+            return null;
+        }
+
+        UserFull userFull = new UserFull();
+
+        userFull.setId( user.getId() );
+        userFull.setFirstName( user.getFirstName() );
+        userFull.setEmail( user.getEmail() );
+
+        return userFull;
+    }
+}
diff --git a/api/target/generated-sources/annotations/no/freshify/api/model/mapper/ItemMapperImpl.java b/api/target/generated-sources/annotations/no/freshify/api/model/mapper/ItemMapperImpl.java
new file mode 100644
index 0000000..a27343a
--- /dev/null
+++ b/api/target/generated-sources/annotations/no/freshify/api/model/mapper/ItemMapperImpl.java
@@ -0,0 +1,99 @@
+package no.freshify.api.model.mapper;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.processing.Generated;
+import no.freshify.api.exception.IllegalItemParameterException;
+import no.freshify.api.model.Item;
+import no.freshify.api.model.ItemType;
+import no.freshify.api.model.dto.InventoryItem;
+import no.freshify.api.model.dto.ItemTypeDTO;
+import no.freshify.api.model.dto.UpdateInventoryItem;
+import org.mapstruct.factory.Mappers;
+
+@Generated(
+    value = "org.mapstruct.ap.MappingProcessor",
+    date = "2023-04-28T10:55:48+0200",
+    comments = "version: 1.4.2.Final, compiler: javac, environment: Java 17.0.6 (Oracle Corporation)"
+)
+public class ItemMapperImpl extends ItemMapper {
+
+    private final UserMapper userMapper = Mappers.getMapper( UserMapper.class );
+
+    @Override
+    public InventoryItem toItemDto(Item item) {
+        if ( item == null ) {
+            return null;
+        }
+
+        InventoryItem inventoryItem = new InventoryItem();
+
+        inventoryItem.setId( item.getId() );
+        inventoryItem.setLastChanged( item.getLastChanged() );
+        inventoryItem.setBought( item.getBought() );
+        inventoryItem.setRemaining( item.getRemaining() );
+        inventoryItem.setSuggested( item.getSuggested() );
+        inventoryItem.setStatus( item.getStatus() );
+        inventoryItem.setType( item.getType() );
+        inventoryItem.setAddedBy( userMapper.toUserFull( item.getAddedBy() ) );
+
+        return inventoryItem;
+    }
+
+    @Override
+    public List<InventoryItem> toItemDtos(List<Item> items) {
+        if ( items == null ) {
+            return null;
+        }
+
+        List<InventoryItem> list = new ArrayList<InventoryItem>( items.size() );
+        for ( Item item : items ) {
+            list.add( toItemDto( item ) );
+        }
+
+        return list;
+    }
+
+    @Override
+    public ItemTypeDTO toItemTypeDTO(ItemType itemType) {
+        if ( itemType == null ) {
+            return null;
+        }
+
+        ItemTypeDTO itemTypeDTO = new ItemTypeDTO();
+
+        itemTypeDTO.setId( itemType.getId() );
+        itemTypeDTO.setName( itemType.getName() );
+
+        return itemTypeDTO;
+    }
+
+    @Override
+    public List<ItemTypeDTO> toItemTypeDTO(List<ItemType> itemTypes) {
+        if ( itemTypes == null ) {
+            return null;
+        }
+
+        List<ItemTypeDTO> list = new ArrayList<ItemTypeDTO>( itemTypes.size() );
+        for ( ItemType itemType : itemTypes ) {
+            list.add( toItemTypeDTO( itemType ) );
+        }
+
+        return list;
+    }
+
+    @Override
+    public Item toItem(UpdateInventoryItem updateInventoryItem) throws IllegalItemParameterException {
+        if ( updateInventoryItem == null ) {
+            return null;
+        }
+
+        Item item = new Item();
+
+        item.setId( updateInventoryItem.getItemId() );
+        item.setStatus( updateInventoryItem.getState() );
+        item.setRemaining( updateInventoryItem.getRemaining() );
+
+        return item;
+    }
+}
diff --git a/api/target/generated-sources/annotations/no/freshify/api/model/mapper/ShoppingListEntryMapperImpl.java b/api/target/generated-sources/annotations/no/freshify/api/model/mapper/ShoppingListEntryMapperImpl.java
new file mode 100644
index 0000000..67f5c33
--- /dev/null
+++ b/api/target/generated-sources/annotations/no/freshify/api/model/mapper/ShoppingListEntryMapperImpl.java
@@ -0,0 +1,96 @@
+package no.freshify.api.model.mapper;
+
+import java.util.ArrayList;
+import java.util.List;
+import javax.annotation.processing.Generated;
+import no.freshify.api.model.ItemType;
+import no.freshify.api.model.ShoppingListEntry;
+import no.freshify.api.model.dto.ShoppingListEntryEditRequest;
+import no.freshify.api.model.dto.ShoppingListEntryRequest;
+import no.freshify.api.model.dto.ShoppingListEntryResponse;
+import org.mapstruct.factory.Mappers;
+
+@Generated(
+    value = "org.mapstruct.ap.MappingProcessor",
+    date = "2023-04-28T10:55:48+0200",
+    comments = "version: 1.4.2.Final, compiler: javac, environment: Java 17.0.6 (Oracle Corporation)"
+)
+public class ShoppingListEntryMapperImpl extends ShoppingListEntryMapper {
+
+    private final UserMapper userMapper = Mappers.getMapper( UserMapper.class );
+
+    @Override
+    public ShoppingListEntryResponse toShoppingListEntryResponse(ShoppingListEntry shoppingListEntry) {
+        if ( shoppingListEntry == null ) {
+            return null;
+        }
+
+        ShoppingListEntryResponse shoppingListEntryResponse = new ShoppingListEntryResponse();
+
+        shoppingListEntryResponse.setId( shoppingListEntry.getId() );
+        shoppingListEntryResponse.setCount( shoppingListEntry.getCount() );
+        shoppingListEntryResponse.setSuggested( shoppingListEntry.getSuggested() );
+        shoppingListEntryResponse.setChecked( shoppingListEntry.getChecked() );
+        shoppingListEntryResponse.setType( shoppingListEntry.getType() );
+        shoppingListEntryResponse.setAddedBy( userMapper.toUserFull( shoppingListEntry.getAddedBy() ) );
+
+        return shoppingListEntryResponse;
+    }
+
+    @Override
+    public List<ShoppingListEntryResponse> toShoppingListEntryResponse(List<ShoppingListEntry> shoppingListEntries) {
+        if ( shoppingListEntries == null ) {
+            return null;
+        }
+
+        List<ShoppingListEntryResponse> list = new ArrayList<ShoppingListEntryResponse>( shoppingListEntries.size() );
+        for ( ShoppingListEntry shoppingListEntry : shoppingListEntries ) {
+            list.add( toShoppingListEntryResponse( shoppingListEntry ) );
+        }
+
+        return list;
+    }
+
+    @Override
+    public ShoppingListEntry fromShoppingListEntryRequest(ShoppingListEntryRequest shoppingListEntryRequest) {
+        if ( shoppingListEntryRequest == null ) {
+            return null;
+        }
+
+        ShoppingListEntry shoppingListEntry = new ShoppingListEntry();
+
+        shoppingListEntry.setType( shoppingListEntryRequestToItemType( shoppingListEntryRequest ) );
+        shoppingListEntry.setCount( shoppingListEntryRequest.getCount() );
+        shoppingListEntry.setSuggested( shoppingListEntryRequest.getSuggested() );
+
+        return shoppingListEntry;
+    }
+
+    @Override
+    public ShoppingListEntry fromShoppingListEntryEditRequest(ShoppingListEntryEditRequest shoppingListEntryEditRequest) {
+        if ( shoppingListEntryEditRequest == null ) {
+            return null;
+        }
+
+        ShoppingListEntry shoppingListEntry = new ShoppingListEntry();
+
+        shoppingListEntry.setId( shoppingListEntryEditRequest.getId() );
+        shoppingListEntry.setCount( shoppingListEntryEditRequest.getCount() );
+        shoppingListEntry.setSuggested( shoppingListEntryEditRequest.getSuggested() );
+        shoppingListEntry.setChecked( shoppingListEntryEditRequest.getChecked() );
+
+        return shoppingListEntry;
+    }
+
+    protected ItemType shoppingListEntryRequestToItemType(ShoppingListEntryRequest shoppingListEntryRequest) {
+        if ( shoppingListEntryRequest == null ) {
+            return null;
+        }
+
+        ItemType itemType = new ItemType();
+
+        itemType.setId( shoppingListEntryRequest.getItemTypeId() );
+
+        return itemType;
+    }
+}
diff --git a/api/target/generated-sources/annotations/no/freshify/api/model/mapper/UserMapperImpl.java b/api/target/generated-sources/annotations/no/freshify/api/model/mapper/UserMapperImpl.java
new file mode 100644
index 0000000..81fe332
--- /dev/null
+++ b/api/target/generated-sources/annotations/no/freshify/api/model/mapper/UserMapperImpl.java
@@ -0,0 +1,75 @@
+package no.freshify.api.model.mapper;
+
+import javax.annotation.processing.Generated;
+import no.freshify.api.model.User;
+import no.freshify.api.model.dto.CreateUser;
+import no.freshify.api.model.dto.UpdateUser;
+import no.freshify.api.model.dto.UserFull;
+import no.freshify.api.model.dto.UserId;
+
+@Generated(
+    value = "org.mapstruct.ap.MappingProcessor",
+    date = "2023-04-28T10:55:48+0200",
+    comments = "version: 1.4.2.Final, compiler: javac, environment: Java 17.0.6 (Oracle Corporation)"
+)
+public class UserMapperImpl extends UserMapper {
+
+    @Override
+    public User fromCreateUser(CreateUser user) {
+        if ( user == null ) {
+            return null;
+        }
+
+        User user1 = new User();
+
+        user1.setPassword( encodePassword( user.getPassword() ) );
+        user1.setFirstName( user.getFirstName() );
+        user1.setEmail( user.getEmail() );
+
+        return user1;
+    }
+
+    @Override
+    public UserFull toUserFull(User user) {
+        if ( user == null ) {
+            return null;
+        }
+
+        UserFull userFull = new UserFull();
+
+        userFull.setId( user.getId() );
+        userFull.setFirstName( user.getFirstName() );
+        userFull.setEmail( user.getEmail() );
+
+        return userFull;
+    }
+
+    @Override
+    public UserId toUserId(User user) {
+        if ( user == null ) {
+            return null;
+        }
+
+        UserId userId = new UserId();
+
+        userId.userId = user.getId();
+
+        return userId;
+    }
+
+    @Override
+    public User toUser(UpdateUser user) {
+        if ( user == null ) {
+            return null;
+        }
+
+        User user1 = new User();
+
+        user1.setId( user.getId() );
+        user1.setFirstName( user.getFirstName() );
+        user1.setEmail( user.getEmail() );
+        user1.setPassword( user.getPassword() );
+
+        return user1;
+    }
+}
diff --git a/api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
new file mode 100644
index 0000000..755ff56
--- /dev/null
+++ b/api/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
@@ -0,0 +1,67 @@
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\mapper\HouseholdMemberMapper.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\ShoppingListEntryNotFoundException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\controller\UserController.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\GlobalExceptionHandler.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\HouseholdMemberAlreadyExistsException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\ItemTypeDTO.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\ShoppingListEntry.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\ItemType.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\repository\ItemRepository.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\service\ItemService.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\UserNotFoundException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\security\AuthenticationService.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\HouseholdMemberRole.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\InventoryItem.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\InvalidItemCountException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\mapper\HouseholdMapper.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\security\UserAuthentication.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\controller\HouseholdMemberController.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\ItemTypeNotFoundException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\security\JwtTokenFilter.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\CreateUser.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\ItemStatus.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\ShoppingListEntryResponse.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\repository\UserRepository.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\security\PermissionEvaluatorImpl.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\ShoppingListEntryRequest.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\UserDoesNotBelongToHouseholdException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\security\WebSecurityConfiguration.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\service\ShoppingListEntryService.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\UserTypeRequest.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\service\HouseholdService.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\UserFull.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\controller\ShoppingListController.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\IllegalItemStatusException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\service\UserService.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\repository\HouseholdMemberRepository.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\security\JwtUserDetailsService.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\mapper\ItemMapper.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\repository\ShoppingListEntryRepository.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\IllegalItemParameterException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\LoginUser.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\service\ItemTypeService.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\ItemNotFoundException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\UpdateUser.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\Household.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\InvalidHouseholdMemberRoleException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\ItemDoesNotBelongToHouseholdException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\FreshifyApiApplication.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\HouseholdMemberKey.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\HouseholdMemberDTO.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\User.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\mapper\ShoppingListEntryMapper.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\Item.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\repository\HouseholdRepository.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\service\HouseholdMemberService.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\controller\HouseholdController.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\security\UserDetailsImpl.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\HouseholdMember.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\repository\ItemTypeRepository.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\controller\ItemTypeController.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\ShoppingListEntryEditRequest.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\controller\InventoryController.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\HouseholdNotFoundException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\exception\ShoppingListEntryAlreadyExistsException.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\security\CookieFactory.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\dto\HouseholdDTO.java
+C:\Users\matsl\SmartMat\smartmat-backend\api\src\main\java\no\freshify\api\model\mapper\UserMapper.java
diff --git a/api/target/test-classes/application-test.properties b/api/target/test-classes/application-test.properties
new file mode 100644
index 0000000..b27d78a
--- /dev/null
+++ b/api/target/test-classes/application-test.properties
@@ -0,0 +1,8 @@
+spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
+spring.datasource.driverClassName=org.h2.Driver
+spring.datasource.username=sa
+spring.datasource.password=
+spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
+spring.jpa.hibernate.ddl-auto=create-drop
+
+jwt.secret=abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz abcdefghijklmnopqrstuvwxyz
\ No newline at end of file
diff --git a/api/target/test-classes/no/freshify/api/FreshifyAPIApplicationTests.class b/api/target/test-classes/no/freshify/api/FreshifyAPIApplicationTests.class
new file mode 100644
index 0000000000000000000000000000000000000000..ff7da82404a049bc5e08874e4b33da49e5009aa5
GIT binary patch
literal 629
zcmb7BO;5r=5S@hriXezzG4a4rCA#tA#gC+#keD<|gmCe+En8SDyUlis`m;Qlc<=}K
zql~k)2aU$W9^Q0j-kW{1`}Y3w3IM0DS%m@=E8x_i1Z4uvDVsAIF*&B!{*(uXK>0*S
zVa^B?cXo#rSRl}miiVme6A?aA77N<V6SsHi#&IM9W`vRho|uGybD>6@K*JM~U!^mj
z>jCp4th788uxQA%uz6l|%tWAQ-}}cI#{_DDl7>GRPq7iow{B8t#EcI`B5<}Vr81c(
z>}`8WkLfhUr4VCbxXzZac5za*uTmZGuCNx{e{6POuZqA?HZF;^kmFFZ8NXNhj`~U&
zYH%XWjnRI_ILCT^(BZGbZyGl+V$OS7h3F<hbEP?pQuO6m8nmH;uV+7t_<lfO5&tMg
zVk>*kK%TO8716c<2}_8zPXfj|W&q3BEo9;jW|sFuSpOo#3(tfNB-*h}j0IT9um!f-
Q!h99u8g|!jfh4f;0q{qg(EtDd

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/controller/HouseholdControllerTest.class b/api/target/test-classes/no/freshify/api/controller/HouseholdControllerTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..c8b6fd6d0d8d1ee1e7452def3f630b435654c90b
GIT binary patch
literal 9866
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
btDO6_8z516O<w2kH}=Sz@|HiCmaqRG_{z##

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/controller/HouseholdMemberControllerTest.class b/api/target/test-classes/no/freshify/api/controller/HouseholdMemberControllerTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..44c226b387b29e76b7394483a566ee98af11388d
GIT binary patch
literal 10804
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

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/controller/InventoryControllerTest.class b/api/target/test-classes/no/freshify/api/controller/InventoryControllerTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..dab2eb22727a8ed72e7ecabbf31f8bcb985c9347
GIT binary patch
literal 10791
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
NUSRF#4rb)gZvozv6P^G7

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/controller/ItemTypeControllerTest.class b/api/target/test-classes/no/freshify/api/controller/ItemTypeControllerTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..0b0e6171ed85786e96679b355ab31cdd991c8960
GIT binary patch
literal 5016
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
Q`)lX$H~hUa=;0s#0e8d<zyJUM

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/controller/ShoppingListControllerTest.class b/api/target/test-classes/no/freshify/api/controller/ShoppingListControllerTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..ef8229b855334901623acd7e829b730a5c88962e
GIT binary patch
literal 12848
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

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/controller/UserControllerTest.class b/api/target/test-classes/no/freshify/api/controller/UserControllerTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..5c64597077dd4bb3f277635c18062d5c429e39b6
GIT binary patch
literal 12545
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

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/security/TestAuthenticationService.class b/api/target/test-classes/no/freshify/api/security/TestAuthenticationService.class
new file mode 100644
index 0000000000000000000000000000000000000000..6af0ee0647cb483bdd99752f74279fe1153b7f50
GIT binary patch
literal 7437
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

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/security/TestCookieFactory.class b/api/target/test-classes/no/freshify/api/security/TestCookieFactory.class
new file mode 100644
index 0000000000000000000000000000000000000000..43c03095113427a23d6bf99088660aec3abac8fb
GIT binary patch
literal 1183
zcma)6+foxj5IvIwHZBW+1rx3kyg)*b6|WCbt0+o*S+Po}_&kIm8CZ63GK+<O<%?22
z_yK;DWzQzaO(^rwv)wb@=k%GL{QCXlCxBOY;Ua^qgPeyx^fL_a@gp8YJZ=T=xA#QT
zF!aBau{5t4vXyEhk356h7Ez==D;@2)a53P(^Du}ZhWS_pyIOSGa`!mkhcf7hW}>Az
z4%U>~mtvhajnc;q#g;IuiD@e>zi=Z}+}&qbsf1?~HjS2Xt6rthKG%j*Ieiof6SR#v
z?3JwNG0ZS{p_mIFqYlPA+(waM>V|X%hp24u1Hmv>u}G)=_rP6@W5U6thbc@ml$CA;
zdkHB*_D~w3(>_-_M9ucmVeokBy!n*yh}?zq9d$*mpM&W|strr}j)z&xI8U4!JW7Ps
zch19I++!G`;94ZOKGkYA<$IGd4;bKJfno95i`fz#bLnz&Yift&D1<T=8_B`8&|7>v
zqKF@=CXX6iOY8T7In$QZ=2H0o5Os!0L%46R8G=5e_C;**u3QJrV>2BkhM613f??uA
z5*v9S8nPpa?rIz>lg=8koeuwfk5&z0=l9rMklWo<iEfH@X{9J$(QVms#T@48McH2#
z%)TkI74iaF=`zr__#NykePmE2Yqx<s7Rh?u1E^t%Jcfs~n@N+~_K{L-(s#nz32wdf
z3rpWHa)MHg))`vQDi#S87@+eW)g8hJ3Yfrfics!W=^<oM!g5M1Powt;D}?fxaxJGP
zDTAkf8GNKY+g9lW<<KwGy6FCW`nU-1BS*)^$QJ1@p+t5(g)Vl}d(b(Irhx1c;4{k2
G;Q1fr%O3#%

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/security/TestPermissionEvaluator.class b/api/target/test-classes/no/freshify/api/security/TestPermissionEvaluator.class
new file mode 100644
index 0000000000000000000000000000000000000000..1d8300e7613e46acada0cc524e52aa66175478fe
GIT binary patch
literal 3121
zcmbVO30D(W6#iaV2EvFGv@MH@RwWBMN{beww5Xw?K`en-s9lCIkildIXThfXzVGcH
zX-@%L&gl>6kLu~YGua4<<TU4G-pqUNF5h?WyZ8O`?_YldxPqU92%t$qvy2wB3UsZh
z8>*63ja6l4X-!Kz0<D*ILwCjnnnK}}gf@Y5hN-Mrnw`;C@`}2yE4G$)E#1j0cQh-f
z+qP~R@eMWWs*Y(*<<_%7NN8$D2V@BcWOU--<CM&4wo^lqK+pPK^#WrF(^^&RbxSu^
zS1dKBJv6QRWtY@+TC?q1p2Z|QA<$P1CTA{dS!LeVtRT94w-3oUj3)(}U78gbNYs~!
z1@Sa`CG^SY$ACa*nb3r3tO`g>j5f1Ea6&i3iQUU2-G!qvj$u%s#nzmuW!_i4E1YV>
z33A6FrdZ;nj8ix*&_)vRoT_I94p#~#9VREn;R^{ItL^;_lh9?%>~au8KJ2KBVVn_Y
z&lHygj@Q9nk|qd4I4a?sz^Q!<O>4O&W?A73d{!XT(EeLmK8O)C@#BJwi%eA~0WWzl
zMF>VPCgTz>wbK#@lV=rNW^S(toC)oR!*`C15p68_f{Yh2As|<p5;(c9qJsQ28P^e~
z_!s=4IMfqmcS))pFX4uSDH%6$OCa13JF{k1BhbnDJMr21WPDa2+89z6q}VB#mT?<1
zzN5ajv-KP;QSOuFsR*Y!@G@p4BxTHDzIXy$N6#t=-KK&PFe&+ow{q(Hr6yK54W+Fy
zE*W=ayn+R)Or<3BjoCEit0?c6@G9Z0=BZSjnAZu{$!Lb7r&Will!Vu6q}?uo>zYFc
z%J$3HJ-oq%@=XDy9w%P#svYALTEr5|rUk}Bk1tti)6x`|oL%;9d&Q{WhnE)}&}6KD
zs!6B13y;7^1FCm(5NpG58`k)wxKv=-ZU?f+NibxXSQohXKMSnDfsAUGOSypA2=XfT
zd@glUNotm^X7#t#CCb!_>?u^YikV_QEe2u1mf*;6u^}+XK-OGpXY^dx9nJFE*Mv=&
zIUOjcf~xm1XSsBYnnR0RYTpu|!1=!bt9)0+d#ta+-#n>iZST<OtA^^h7QK&EWx(ae
z4q<FOMpmy;2NF1#&<*Xj%O!G-Aq#XT%(R+KsYC;P7bcsXj81-!>@iTv;yV45EOCc%
zDZs5cuM!Ik?a|_Q!>WT$qD}X;yg;O}{ai%_dS_iacsVVl+dBC_VHl?4okDW|gqOB^
zLvvMIp~DbY(-~55g!|o%%8Z&ctz<E2xi8m_FB3rGeYM0VjJ#<Ow>^bLqvGm8*^o3{
zE3HlHO#cAuDQ9!(hI5t+8IDt}3Q&%;pqno^^cLVF>Wy@H@J8yU-be)v0`Gh8ACLq^
z0<HA?kY>iwL~lS>WE&!~18HF!?VAYx=I#E7o_u8k*=Qy!AJd!c@5d+jl)eN$BV7U3
zB|7=uMRUKBo-WeUy@{U4ALt1_!c$u~!mr)Ox9|)t57BaX6A_w=_{(Q^pwQ&`#12Mi
zd~SN!pC2uZ&qs&15R0<F7RGt(*}~Q6@0i>|A`*RsJDW(6=Ea2_+*{yf`lq(>`Zm-}
zESK?Ir5g<B*3^Ms;;D}s^Z+6_f>CbO7(|@7oyG~w<0KW)Q&_@jtkEUo0m8`B&R-Dq
zco_7t7I?UVyZ9Vm5Fc^O;7fc(oP14onCEY36!^Bt6ZKh+0nkex2I;@dNV_xL`k%Pp
zf=75zcGf5V9JzbGg8bfs(V~IxJOkhFYv5r$1EXZ%!oCK6C>fY4Am}e5IE1{9p=jcr
VY7Cc%>R5$|{+bwmBqRa+^dEXPR=fZJ

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/service/HouseholdMemberServiceTest.class b/api/target/test-classes/no/freshify/api/service/HouseholdMemberServiceTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..afae0c8b06694eb5c2ca9eeb8692dc4753937061
GIT binary patch
literal 6011
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
U@6YW0jbljy{5$@Me`D?c060gZt^fc4

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/service/HouseholdServiceTest.class b/api/target/test-classes/no/freshify/api/service/HouseholdServiceTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..1b4a09b42abb644de9bd26fdbea81197c68d1024
GIT binary patch
literal 9526
zcmb7J349#YdH;X9Mp}(5du0qV1|KoDBp>So47QBHvSlnI+d{HsY;&!&BWdl`j=YC#
zaVFe^n1lpENE&jN(j+ZVEK5KPz0#7V>5&wAq@_*orfGT~X&U<fW@cw+wY!$X4{K-M
zd*AoI<NqD+%{PAX>Nx<{%CjL<pwd8<iE7jc<{pcVM<a=7ayYVo;FvX-5!7srC*zrI
zg36ZG{t#+WXCP#v9;RSUetEZ@92OYk(L~nTKO|^s+0)uxINe@{IcPL6*Tg)81*?;G
zWGH2&N8&>hk?2@FlD1Og@j)xH+s>w~5jzp<a|aGsX$n$5k{j-dQPP>r4a^s;oXK+3
zj#-JwXmo7MN<|KGgT2mU2n%qrflEv@W1-+OJ2k9}(wS6tFcTSy4rc7sM8sX27Ss(}
z8TUnSMN44k9f@c<-5ylbHJhXAA`_S4azTjNc>4-kyDw10b^}WUi%YNeEfm6HRH|Ly
zXJR?7ps2o;1WU{8<x{sS`AQQlXcbhat&Cc>DX5^jwY{~!7OTkGr&F>uCe|WCmy>K?
zbkq`D6eR4+q~Z>#f%SrgrPWY}gs{%l;7Su$VUxg2*u%qCtShOrf<<MN(AoA{Ttg^i
zh>z>7Q_<0}gtd0i9#xiGOth<bwG^*&G#XFT67HxSqrXntshBRg&cyY)q@GK9yzyFe
z2&xotx?-n^PF-Pg#jbcN?I>E!$kG2ox?-i;evgS8Rq|?e^!i%tr4f(WBgvR;1;whx
ze)8VK2_?G8M6XY@A;+|$7X3;cO<G0NH!C$K3>*=(l(wkvqP^DWfR(z@nh4=AD)rB;
zCT>$d&!IB@vMyTUFzzrB)u}p8sa?Bb1_lZB3)-U&7KRKAn;1cy0KXujUOPd=)b$<g
z>Fhn&*V!vrRmRW0sIEpzNZ1bGxTdUx;OUkNBcv(XXIoirfrGW#hy(Jq_N!5nCTz7x
zl`5zrpD>XE(}}{#S4*&bRt*?|2C@z=n4Ytlcp|brm5NSu$J3d5oWv;u6DID&UAdI(
zEYVp(h0SctE%Le8OHp3d@|V)88Qh~*y;soe5je9u>_mdKAZ{lqh+_BsCO&}s8SxI_
zeN|iwP(d#_=UJ<e52}O@2{x6G<pQMBeIGILsO~#=Bv%T&Ee(87FwarZ*>ra_J<?|}
zh9AQ{s+N-?pD^)ZrM_e)wYqm#Hj${ullZ8CkC}K1PYW9I{K$*RBc8ERQC0@Qf|j85
zy1eoBdOU+q7<ksiC-EskIL{!rg!ytLn%-xfB0m<?BTDgU6VKr@#7WW_o}c3#D8mlo
zKWF0e_yRew8mY*F%el04xH*Uop$T6y@w0fIMJQwE)D(1-L!3iaj%O@mJ0(<2MO9DY
z1rtAyFH@0djCG?R{pT=tL`%h2P5c6Wk?;-T-UmxK2sIko!`MqEUdAs4eck7F1A?|9
zrD=_lodfN529pNPnwY|LiL6<UkU>hNd}IrDmNS{ZhHXG;U*uOPhF>%BI=)6@_$chP
z#_V)lI}X9RA|5G!Hs2TJDd>kc@TP%ZHt{R?Rl(YsBAlO`pi4)`nTc1F2+9&|jqdjA
zCcci}V7Lv%lX(kuOla@0G04X49f}lkTe7@SLU;?`Fz{O@zKP$aU7TLb9z0HqME1JB
z6!YYWl@x3V^3P$cJ4lhvWCsS=c|`Unhi(4$dG9pT@8EY0{GN&5*KL+x2$6;j_wBVZ
z*;G=Y^c@p_pt>)dp}Vh**3)<JhX(%0#2@2N1WR<EV_CM){5z%@#A$W6r-?kxs9Fx#
zd+??6L^hh>>&g;3mdKB+2!ATLa;CqnQ-ju+GR~uApPkudXOpqc+*Fv|%eyB29Dl)N
zVx6)Evl&9*XfeXeMThoBgnMb#hO$YgRzx}-&d~v<V84UEH1SvXYhT?1BPshN)$I$a
z>-N(>1>+z_9gg01i}AN6{tkanJTY7P?(vh(yj+rX%7tbfh4%MN{G%qckadc+Gp(2o
z;h*qB1OKcio`1>J7$-A#*lb0j1m%L3BSA5|apwr|Zzld7|G{$V2fHglK7d&diz1{{
z%+92vy#Iy&Ht;_teuV!m0fY--!XrWfkUjHsO!x-Vpk5aAkQdbX%BEcg(`+sN&%{sg
z9-F!Z&kX%~4s=S~9>$G`DHT%566%#M`aOR@ENBy?+LRhGG%>~RbUAb}q@<4VBq8?L
zEnQu${b2~+4M~H{F{IIyxiXJ#2u5_r&YgblXgC>9BzD>igApbKJ;Axq9rcn-e(iET
zIthbEi+X92`G#C%$^uQSOG|SPP*Aqv__&oMkmM3mnuQ0;5Ko_0#&VNm$pXnE^%+@Y
z%4NcnVq?l0wZ|>r`m_R%(OmMDEHP!NEaM)T_^3tmt!?Ql)MDI9#fRd9Q788M1221d
z1g3-DlI5mcAuD*Icb2l)+!S=ImrV<j>G^pELGMwAd7bdC8lcsbHZ_~6<z;&^wkwfM
zkJQR)LSUbDa!Ha0Mpb;RDG{y9joGnSG?Q1HU4yJQWrJ*V+a33SS=bqQCrs8<xyqDH
zay6UZEHhRxwu%oGfw0hKC%>2`S|^)L*&^-gN%t%q&ZP+_;vMYQ%eDBvA-oVNI_Z?<
z%~+M|P1&x2x~O!-sW6&t&d3f^c519N1QS=<kX?dE`E0NBB@%rl-t~@_>ozkD^=6Zb
zpZ<6{&a}KenY1$wU<jyif#)@NXou#4!LFoU3F%atb9H_3;bfGRkx{zYEl_?WZ!OAc
zGpfFuY1+4u&!!8cEoeWLuxba9P3&~Xlh(eh9(NCD_IFenj3)Y{skpv-gH?=vjhiCL
zXt<KSqf_Jv1vahOF-Fa(bE0N_F5*yHH%7lp!jmVjK#H5zl4N>J4N`6hcEGOH$ZX~T
zh^ra{X4HDdgxGBd%`h>RGsQK9OMe<?HS}eogU5Ln=2>-FnOfap4cRHHGdegzK`z$|
znq7t6qMzfm!qo5<Fq`0!DCGAjbk(9VygkQkJ3m*qzwoyyiVfx_WpIOgmg07X>n%R5
z4o=L@$GLynUT|7yQVzW{lljIHqqDPjcpWUvk3@i*G4l;LdlOG=UuUYaG2m*g)U*29
z3CWxR@|;{TOC}k?Rf*{6KrFhvX#ew2E#GJe9nPDs+=a8V*bU&V0fsZIIGeqeGZbdX
zqf)15rDIgx5ZJanTxaF9jyUeKv#CLAS6tIkvv0<}{C)OXRh&>OgK^#jSjn`u@tyh<
zI~31oBvm{2>p8Mq15<ds(EQA^lS8K*NH&)}X@-~E(XqW&X2g!A8*Ajgki1_$V95QZ
zJRlFU%gcKro*cK2Taj+ZtE7l}7vj7s9Sy#HGuS_PMD7N=qsdspN-yuW?c>?8b{B+B
z4fU#aV5ETX0JBtZ`GrrqTb`db*s*w=cSIA3J|4^3=c1;uS{@0pop{uglg`@*_3d#}
z#+|p*`u2n=S?BE|`u3zLDgAC@b|sTm$~nDga~8_?k%sUl>53xTmNJte&oEb>e<^dN
zYf~)cT|xy9at-{;3k8Vm;ad%VZ{%-<HbgVW^ej>|#!HsKST||I`gulq=oba&m-q6{
zFK@Y>Uta!^X0JZWKCa_MwlmJ_HGh0R$9Y-jzw0`F4&l1FY~J~`i8DQXyAhRq2b$Z?
zLfS%8FwUT%E!;GPi{3=j8C?33vX-0pcMg{Vi%^A?Fxjp3^38OKrB4p<P2?aMS199(
zAM&Y|LsM<9Ve#R!Sb7G_+Fo(~HB4fKK8D*Sv6|ECIKANvHgarZ`07b)b{@7)Vw>}@
zeG)tLVLo<Iyh-fNlXP*sONG`^K8Cwp>aMUy-4))a)czhlT-7rleLhJ~_@GPDlOyQ~
zA0o+XI83RIcCT`|-{Sq=?v3wV?TxR_G2_g@;Z<a>T6VpR*jXIgr(>(Vv7VPP%CRj~
zYjj`|W6f3G1I5c6UNeR9v$*>V?sH$8tETXPGw|?hc<k^R@BQ&D)z17`eCP~LH&;*N
zBfOWXX|9>Z#|6)#MW22~@FoVf803GN|1NE&eLg#hFHYm<Dsbre_r9YWH&;*MD|~oS
zUncR&A^yIq&(k=^RqFRD$M4V4-@uhTfnUY%cAI#kcn#XH85^+$Tltx%lYe`$4Y%St
zeuKCkC$ODY%^i3EJMjc(KZRZRB5uG}u^W@vgL4Gk*U^n{VISVce*77FcvsMiAEQs^
z;h;408_Y7?EbIB9r2|JP!!2?PZk4-mn>>lz<tf}DpGH((z<`|PhZ4o%ZWx?jApLR(
zhN8|x<T?CEZkEGD>D&089N|+1_jz58a$O~NdtPqglj=E)N99&j%WdRFRC^=0bL0+=
zEJek8V!<#l$G~Cd{{aL1|4D;a$h-qs>&JhT%S8qV|4JvqY;LKUBI4P%VH&?y!TZqP
zbZz}D+L}-51;)j<yLEKc6yDCqU6>IE%C``4tiW-8_e(fBFL2p<nyx^d3^HMe#JIYO
z8h_Up$#O&*%EcyqR^h~LL-@OGuhRaM=6jCA-9Xo`(!dzakPZZSgS*iTro+CT?=U@R
zg0K|Ls>LM!hWJ&56joIGA5`rhP;)~22h;F0|5tbNKOLK_@`pWx{CHBZmn%+BOBD;R
z^LI*W)jE~*5t!2GZ=6IUPGL1Ba4oU719uZo_acV-90iuRf_au|B)&#8HF8Z8ZFWC1
zmU><7>C7>ydUKjy%i1$u+MZHh+MW;6o{!9G&tpE*6va_LZ14=|#^sw>TnaiGz-6KH
zI5YogwDR-IdS(j^7Z*AkJcG3Q(8<*>7cj?t-#$$PYLz%TC8mlqE#V5Lm^U2P$;B1$
zWGw6Cyf-h^rBze1cuL+E<dDbv0+uK68_*?qni=OAdh=Nv!6yTzJL*BP9MTiM5etwm
z%wwgH{v18?xd8jpNFVi?KJ0l$%afZirA5tA<e6nnvPw%_F3HN8?p2erj-v$uzL1=O
zFX3W-E4mENGu^(x<oabo`6~f$ZS%af5%rRE0=>{%w(qTJdP|XWwCxqSlACu;$~Dun
zwQTgc^Vj8)(tQOnsFRam7<M@LVwK7XAB?{jDf~-V!f!@bv!S_`clG;mmR_3*DByXG
zGo}-DlFPO3h>YcPmvqiZGbeoGZ>4Gq#W_vV+4id3P}-%hvoU)k;L<rBVge?cTOn*7
z-EM`I%muij`^EXPo9Y%N#ILaeo(u3a3sER(a%6Mraop^2toJzvS}8Zfeg+|YHo&mH
z1Vi?|Wkqz0bTDT>L=hhja4aPvduxy5wVsHLo`_CU^z9<OPq6b#1(-I@6qEJy6g^TQ
z6OPyB(2sZW-(5!`gL1dr!?`xDxtAIHA$gep+^5I<rw{p0ALi3Xxt=$fyZ~;HkJZ%4
LQ}S{71e*UJX#qEk

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/service/ItemServiceTest.class b/api/target/test-classes/no/freshify/api/service/ItemServiceTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..c126661d868e8f663f7d407529cfefb0d5904542
GIT binary patch
literal 5687
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

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/service/ItemTypeServiceTest.class b/api/target/test-classes/no/freshify/api/service/ItemTypeServiceTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..8157f03d9cd91caaaa2cb6c9c14b1422d4b44986
GIT binary patch
literal 4215
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
XBmYNVf8p2Pxt1na|G>ZSZw!A7s-ah>

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/service/ShoppingListEntryServiceTest.class b/api/target/test-classes/no/freshify/api/service/ShoppingListEntryServiceTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..fd50609a1f2ee4acdf27b57bb1c8a9be9274c3be
GIT binary patch
literal 9544
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

literal 0
HcmV?d00001

diff --git a/api/target/test-classes/no/freshify/api/service/UserServiceTest.class b/api/target/test-classes/no/freshify/api/service/UserServiceTest.class
new file mode 100644
index 0000000000000000000000000000000000000000..846b67ffbfc553b4fb1ad1d919dec802a9a5727c
GIT binary patch
literal 4596
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
N3C3{)H?e_%{{d59sO$g$

literal 0
HcmV?d00001

diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index d4582d5..cafa083 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -205,6 +205,48 @@ paths:
           description: User already exists in the household
         '401':
           description: Access denied
+<<<<<<< Updated upstream
+=======
+        '404':
+            description: Household not found
+  /household/{id}/waste:
+    get:
+      tags:
+        - household
+      summary: Returns a list of household waste
+      description: Returns a list of household waste sorted by either number of items wasted or percentage of items wasted
+      parameters:
+        - name: id
+          in: path
+          description: ID of household to get waste from
+          required: true
+          schema:
+            type: integer
+            format: int64
+        - name: sort_by
+          in: query
+          description: Sort by either number of items wasted or percentage of items wasted
+          required: false
+          schema:
+            type: string
+            enum:
+              - number_of_items_wasted
+              - percentage_of_items_wasted
+        - name: limit
+          in: query
+          description: The number of items to return
+          schema:
+            type: integer
+            maximum: 50
+      responses:
+        '200':
+          description: A list of household waste sorted by either number of items wasted or percentage of items wasted
+        '400':
+          description: Invalid ID supplied
+        '404':
+          description: Household waste not found
+  /household/{id}/users/{userId}:
+>>>>>>> Stashed changes
     delete:
       tags:
         - household
-- 
GitLab


From 9fea574379c27b1cd5177540daf1bcf1e05510fc Mon Sep 17 00:00:00 2001
From: Mats Lading <mjlading@stud.ntnu.no>
Date: Fri, 28 Apr 2023 12:03:33 +0200
Subject: [PATCH 4/6] docs: add swagger docs for getting the waste in a
 houeshold

---
 docs/swagger.yaml | 365 ++++++++++++++++++++++++++--------------------
 1 file changed, 207 insertions(+), 158 deletions(-)

diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 0f58217..1b21546 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -7,12 +7,12 @@ info:
     MySQL database. The API is documented using Swagger. The API is hosted using
     Apache.
     Some useful links:
-    - [The GitLab repository](https://gitlab.stud.idi.ntnu.no/idatt2106-v23-10/smartmat-backend) 
+    - [The GitLab repository](https://gitlab.stud.idi.ntnu.no/idatt2106-v23-10/smartmat-backend)
   contact:
     email: vkbugge@hotmail.com
   license:
     name: MIT License
-    url: 'https://opensource.org/licenses/MIT'
+    url: "https://opensource.org/licenses/MIT"
   version: 1.0.0
 servers:
   - url: http://localhost:8080
@@ -41,7 +41,7 @@ paths:
           schema:
             type: string
       responses:
-        '200':
+        "200":
           description: successful operation
           content:
             application/json:
@@ -51,9 +51,9 @@ paths:
                   userId:
                     type: integer
                     format: int64
-        '400':
+        "400":
           description: No email provided
-        '404':
+        "404":
           description: User not found
     post:
       tags:
@@ -66,15 +66,15 @@ paths:
         content:
           application/json:
             schema:
-              $ref: '#/components/schemas/CreateUser'
+              $ref: "#/components/schemas/CreateUser"
       responses:
-        '201':
+        "201":
           description: successful operation
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/UserFull'
-        '409':
+                $ref: "#/components/schemas/UserFull"
+        "409":
           description: User already exists
     put:
       tags:
@@ -87,15 +87,15 @@ paths:
         content:
           application/json:
             schema:
-              $ref: '#/components/schemas/UpdateUser'
+              $ref: "#/components/schemas/UpdateUser"
       responses:
-        '200':
+        "200":
           description: successful operation
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/UserFull'
-        '404':
+                $ref: "#/components/schemas/UserFull"
+        "404":
           description: User not found
   /user/loggedin:
     get:
@@ -105,13 +105,13 @@ paths:
       description: Returns the details of the logged in user, the details are extracted from the jwt token cookie.
       operationId: getUserById
       responses:
-        '200':
+        "200":
           description: Returns the details of the logged in user
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/UserFull'
-        '404':
+                $ref: "#/components/schemas/UserFull"
+        "404":
           description: User not found
   /user/{id}:
     get:
@@ -129,13 +129,13 @@ paths:
             type: integer
             format: int64
       responses:
-        '200':
+        "200":
           description: successful operation
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/UserFull'
-        '404':
+                $ref: "#/components/schemas/UserFull"
+        "404":
           description: User not found
     delete:
       tags:
@@ -152,11 +152,11 @@ paths:
             type: integer
             format: int64
       responses:
-        '204':
+        "204":
           description: successful operation
-        '401':
+        "401":
           description: Access denied
-        '404':
+        "404":
           description: User not found
   /user/{id}/households:
     get:
@@ -175,18 +175,18 @@ paths:
             type: integer
             format: int64
       responses:
-          '200':
-            description: successful operation
-            content:
-              application/json:
-                schema:
-                  type: array
-                  items:
-                    $ref: '#/components/schemas/Household'
-          '401':
-            description: Access denied
-          '404':
-            description: User not found
+        "200":
+          description: successful operation
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: "#/components/schemas/Household"
+        "401":
+          description: Access denied
+        "404":
+          description: User not found
   /user/login:
     post:
       tags:
@@ -199,15 +199,15 @@ paths:
         content:
           application/json:
             schema:
-              $ref: '#/components/schemas/LoginUser'
+              $ref: "#/components/schemas/LoginUser"
       responses:
-        '200':
+        "200":
           description: successful operation
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/UserFull'
-        '401':
+                $ref: "#/components/schemas/UserFull"
+        "401":
           description: User could not be logged in
   /user/logout:
     post:
@@ -217,9 +217,9 @@ paths:
       description: Logs out a user
       operationId: logoutUser
       responses:
-        '200':
+        "200":
           description: successful operation
-        '401':
+        "401":
           description: User could not be logged out
   /household:
     post:
@@ -233,14 +233,14 @@ paths:
         content:
           application/json:
             schema:
-              $ref: '#/components/schemas/CreateHousehold'
+              $ref: "#/components/schemas/CreateHousehold"
       responses:
-        '201':
+        "201":
           description: successful operation
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/Household'
+                $ref: "#/components/schemas/Household"
   /household/{id}/users:
     get:
       tags:
@@ -257,7 +257,7 @@ paths:
             type: integer
             format: int64
       responses:
-        '200':
+        "200":
           description: successful operation
           content:
             application/json:
@@ -267,15 +267,15 @@ paths:
                   type: object
                   properties:
                     id:
-                      $ref: '#/components/schemas/HouseholdMemberKey'
+                      $ref: "#/components/schemas/HouseholdMemberKey"
                     user:
-                      $ref: '#/components/schemas/UserFull'
+                      $ref: "#/components/schemas/UserFull"
                     userType:
-                      $ref: '#/components/schemas/HouseholdUserType'
-        '401':
+                      $ref: "#/components/schemas/HouseholdUserType"
+        "401":
           description: Access denied
-        '404':
-            description: Household not found
+        "404":
+          description: Household not found
     put:
       tags:
         - household
@@ -297,18 +297,18 @@ paths:
             schema:
               $ref: "#/components/schemas/UpdateHouseholdUserType"
       responses:
-        '200':
+        "200":
           description: The updated household member
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/HouseholdMember'
-        '400':
+                $ref: "#/components/schemas/HouseholdMember"
+        "400":
           description: Illegal household member role/User does not belong to household
-        '401':
+        "401":
           description: Access denied
-        '404':
-            description: Household not found/user not found
+        "404":
+          description: Household not found/user not found
     post:
       tags:
         - household
@@ -334,14 +334,14 @@ paths:
                   type: integer
                   format: int64
       responses:
-        '201':
+        "201":
           description: successful operation
-        '409':
+        "409":
           description: User already exists in the household
-        '401':
+        "401":
           description: Access denied
-        '404':
-            description: Household not found
+        "404":
+          description: Household not found
   /household/{id}/users/{userId}:
     delete:
       tags:
@@ -365,12 +365,49 @@ paths:
             type: integer
             format: int64
       responses:
-        '204':
+        "204":
           description: successful operation
-        '404':
+        "404":
           description: User not found/Household not found/User does not belong to household
-        '401':
+        "401":
           description: Access denied
+  /household/{id}/waste:
+    get:
+      tags:
+        - household
+      summary: Returns a list of household waste
+      description: Returns a list of household waste sorted by either number of items wasted or percentage of items wasted. The list is sorted in descending order.
+      parameters:
+        - name: id
+          in: path
+          description: ID of household to get waste from
+          required: true
+          schema:
+            type: integer
+            format: int64
+        - name: sort_by
+          in: query
+          description: Sort by either number of items wasted or percentage of items wasted
+          required: true
+          schema:
+            $ref: "#/components/schemas/ItemSortMethod"
+        - name: limit
+          in: query
+          description: The number of items to return (maximum 50)
+          schema:
+            type: integer
+            maximum: 50
+        - name: time_period
+          in: query
+          description: Time period for the waste data (WEEK, MONTH, YEAR, ALL)
+          required: false
+          schema:
+            $ref: "#/components/schemas/TimePeriod"
+      responses:
+        "200":
+          description: successful operation
+        "404":
+          description: Household not found
   /household/{id}:
     delete:
       tags:
@@ -387,11 +424,11 @@ paths:
             type: integer
             format: int64
       responses:
-        '204':
+        "204":
           description: successful operation
-        '404':
+        "404":
           description: Household not found
-        '401':
+        "401":
           description: Access denied
     get:
       tags:
@@ -408,17 +445,17 @@ paths:
             type: integer
             format: int64
       responses:
-        '200':
+        "200":
           description: successful operation
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/Household'
-        '404':
+                $ref: "#/components/schemas/Household"
+        "404":
           description: Household not found
     put:
       tags:
-          - household
+        - household
       summary: Update household
       description: Updates the household's attributes. Can only be done by a superuser
       operationId: updateHousehold
@@ -435,18 +472,18 @@ paths:
         content:
           application/json:
             schema:
-              $ref: '#/components/schemas/Household'
+              $ref: "#/components/schemas/Household"
       responses:
-          '200':
-            description: successful operation
-          '404':
-            description: Household not found
-          '401':
-            description: Access denied
+        "200":
+          description: successful operation
+        "404":
+          description: Household not found
+        "401":
+          description: Access denied
   /household/{id}/shoppinglist:
     get:
       tags:
-       - shopping list
+        - shopping list
       summary: Get the shopping list of a household
       description: Gets a shopping list with item id from shopping list
       operationId: getShoppingList
@@ -459,19 +496,19 @@ paths:
             type: integer
             format: int64
       responses:
-        '200':
+        "200":
           description: household ShoppingList items
           content:
             application/json:
               schema:
                 type: array
                 items:
-                  $ref: '#/components/schemas/ShoppingListEntry'
-        '401':
+                  $ref: "#/components/schemas/ShoppingListEntry"
+        "401":
           description: Unauthorized
-        '404':
+        "404":
           description: Household not found
-    post: 
+    post:
       tags:
         - shopping list
       summary: Add item to shopping list
@@ -490,19 +527,19 @@ paths:
         content:
           application/json:
             schema:
-              $ref: '#/components/schemas/CreateShoppingListEntry'
+              $ref: "#/components/schemas/CreateShoppingListEntry"
       responses:
-        '201':
+        "201":
           description: Successful operation
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/ShoppingListEntry'
-        '401':
+                $ref: "#/components/schemas/ShoppingListEntry"
+        "401":
           description: Unauthorized response
-        '409':
+        "409":
           description: Item already exists in shopping list
-        '404':
+        "404":
           description: Item type or household does not exist
     put:
       tags:
@@ -522,16 +559,16 @@ paths:
         description: ItemType and count to change in shopping list
         content:
           application/json:
-           schema:
-            $ref: '#/components/schemas/UpdateShoppingListEntry'
+            schema:
+              $ref: "#/components/schemas/UpdateShoppingListEntry"
       responses:
-        '204':
+        "204":
           description: Successful operation
-        '400':
+        "400":
           description: Invalid operation. More items are removed than in shopping list.
-        '401':
+        "401":
           description: Unauthorized response, user is not validated or does not have access
-        '404':
+        "404":
           description: Shopping list entry not found
   /household/{id}/shoppinglist/{listEntryId}:
     delete:
@@ -556,11 +593,11 @@ paths:
             type: integer
             format: int64
       responses:
-        '204':
+        "204":
           description: Successful operation
-        '404':
+        "404":
           description: Shopping list or shopping list entry not found.
-        '401':
+        "401":
           description: Unauthorized response, user is not validated or does not have access
   /household/{id}/shoppinglist/buy:
     post:
@@ -578,13 +615,13 @@ paths:
             type: integer
             format: int64
       responses:
-        '200':
+        "200":
           description: Successful operation
-        '400':
+        "400":
           description: Invalid operation. More items are removed than in shopping list.
-        '401':
+        "401":
           description: Unauthorized response, user is not validated or does not have access
-        '404':
+        "404":
           description: Item not found in shopping list
   /household/{id}/inventory:
     post:
@@ -617,19 +654,19 @@ paths:
                     type: integer
                     format: int64
       responses:
-        '201':
+        "201":
           description: Returns a list of the newly added items.
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/InventoryItems'
-        '401':
+                $ref: "#/components/schemas/InventoryItems"
+        "401":
           description: Unauthorized response, user is not validated or does not have access
-        '404':
+        "404":
           description: Household not found/User not found/Item type not found
     get:
       tags:
-       - inventory
+        - inventory
       summary: Gets all items from inventory
       description: Gets all items of a specific inventory
       operationId: getInventoryItems
@@ -642,17 +679,17 @@ paths:
             type: integer
             format: int64
       responses:
-        '200':
+        "200":
           description: item found
           content:
             application/json:
               schema:
                 type: array
                 items:
-                  $ref: '#/components/schemas/Item'
-        '401':
+                  $ref: "#/components/schemas/Item"
+        "401":
           description: Unauthorized
-        '404':
+        "404":
           description: Household not found
     put:
       tags:
@@ -675,13 +712,13 @@ paths:
             schema:
               $ref: "#/components/schemas/UpdateItem"
       responses:
-        '200':
+        "200":
           description: Successful operation
-        '400':
+        "400":
           description: The given item status is not a valid status for item/item does not belong to household
-        '401':
+        "401":
           description: Unauthorized response, user is not validated or does not have access
-        '404':
+        "404":
           description: Item not found/household not found
   /household/{id}/inventory/{itemId}:
     delete:
@@ -693,7 +730,7 @@ paths:
       parameters:
         - name: id
           in: path
-          description: ID of household's inventory to delete the item from 
+          description: ID of household's inventory to delete the item from
           required: true
           schema:
             type: integer
@@ -706,11 +743,11 @@ paths:
             type: integer
             format: int64
       responses:
-        '200':
+        "200":
           description: Successful operation
-        '401':
+        "401":
           description: Unauthorized response, user is not validated or does not have access
-        '404':
+        "404":
           description: Item not found/household not found
   /household/{id}/inventory/suggest:
     post:
@@ -743,15 +780,15 @@ paths:
                     type: integer
                     format: int64
       responses:
-        '201':
+        "201":
           description: Returns a list of the newly added suggestions.
           content:
             application/json:
               schema:
-                $ref: '#/components/schemas/InventoryItems'
-        '401':
+                $ref: "#/components/schemas/InventoryItems"
+        "401":
           description: Unauthorized response, user is not validated or does not have access
-        '404':
+        "404":
           description: Household not found/User not found/Item type not found
   /itemtype:
     get:
@@ -774,7 +811,7 @@ paths:
               schema:
                 type: array
                 items:
-                  $ref: '#/components/schemas/ItemType'
+                  $ref: "#/components/schemas/ItemType"
         404:
           description: No item types found
 components:
@@ -882,19 +919,31 @@ components:
           format: int32
           example: 1
         type:
-          $ref: '#/components/schemas/ItemType'
+          $ref: "#/components/schemas/ItemType"
         suggested:
           type: boolean
         checked:
           example: false
           type: boolean
         addedBy:
-          $ref: '#/components/schemas/UserFull'
+          $ref: "#/components/schemas/UserFull"
     ItemState:
       type: string
       enum:
         - INVENTORY
         - USED
+    ItemSortMethod:
+      type: string
+      enum:
+        - COUNT
+        - PERCENTAGE
+    TimePeriod:
+      type: string
+      enum:
+        - WEEK
+        - MONTH
+        - YEAR
+        - ALL 
     UpdateItem:
       type: object
       properties:
@@ -916,7 +965,7 @@ components:
           type: integer
           example: 123
         state:
-          $ref: '#/components/schemas/ItemState' 
+          $ref: "#/components/schemas/ItemState"
         remaining:
           type: number
           format: double
@@ -928,36 +977,36 @@ components:
         suggested:
           type: boolean
         type:
-          $ref: '#/components/schemas/ItemType'
+          $ref: "#/components/schemas/ItemType"
         addedBy:
-          $ref: '#/components/schemas/UserFull'
+          $ref: "#/components/schemas/UserFull"
     InventoryItems:
       type: array
       items:
-          properties:
-            id:
-              type: integer
-              example: 123
-            state:
-              $ref: '#/components/schemas/ItemState' 
-            remaining:
-              type: number
-              format: double
-              example: 1
-            lastChanged:
-              type: string
-              format: date
-              example: "2020-01-01"
-            addedDate:
-              type: string
-              format: date
-              example: "2020-01-01"
-            suggested:
-              type: boolean
-            type:
-              $ref: '#/components/schemas/ItemType'
-            addedBy:
-              $ref: '#/components/schemas/UserFull'
+        properties:
+          id:
+            type: integer
+            example: 123
+          state:
+            $ref: "#/components/schemas/ItemState"
+          remaining:
+            type: number
+            format: double
+            example: 1
+          lastChanged:
+            type: string
+            format: date
+            example: "2020-01-01"
+          addedDate:
+            type: string
+            format: date
+            example: "2020-01-01"
+          suggested:
+            type: boolean
+          type:
+            $ref: "#/components/schemas/ItemType"
+          addedBy:
+            $ref: "#/components/schemas/UserFull"
     HouseholdUserType:
       type: string
       enum:
@@ -970,7 +1019,7 @@ components:
           type: integer
           example: 123
         type:
-          $ref: '#/components/schemas/HouseholdUserType'
+          $ref: "#/components/schemas/HouseholdUserType"
     HouseholdMemberKey:
       type: object
       properties:
@@ -984,11 +1033,11 @@ components:
       type: object
       properties:
         id:
-          $ref: '#/components/schemas/HouseholdMemberKey'
+          $ref: "#/components/schemas/HouseholdMemberKey"
         user:
-          $ref: '#/components/schemas/UserFull'
+          $ref: "#/components/schemas/UserFull"
         type:
-          $ref: '#/components/schemas/HouseholdUserType'
+          $ref: "#/components/schemas/HouseholdUserType"
     Household:
       type: object
       properties:
-- 
GitLab


From 2e6d5d66160d85dc24cc0833b5e89d1789be1fa1 Mon Sep 17 00:00:00 2001
From: Mats Lading <mjlading@stud.ntnu.no>
Date: Fri, 28 Apr 2023 12:07:35 +0200
Subject: [PATCH 5/6] docs: take in two dates for time interval instead of enum

---
 docs/swagger.yaml | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/docs/swagger.yaml b/docs/swagger.yaml
index 1b21546..6ec84a0 100644
--- a/docs/swagger.yaml
+++ b/docs/swagger.yaml
@@ -397,12 +397,18 @@ paths:
           schema:
             type: integer
             maximum: 50
-        - name: time_period
+        - name: start_date
           in: query
-          description: Time period for the waste data (WEEK, MONTH, YEAR, ALL)
+          description: Start date for the time interval (YYYY-MM-DD)
           required: false
           schema:
-            $ref: "#/components/schemas/TimePeriod"
+            type: string
+        - name: end_date
+          in: query
+          description: End date for the time interval (YYYY-MM-DD)
+          required: false
+          schema:
+            type: string  
       responses:
         "200":
           description: successful operation
-- 
GitLab


From 31cf0a7d590c1ded12114db471f72f83d35f6857 Mon Sep 17 00:00:00 2001
From: Mats Lading <mjlading@stud.ntnu.no>
Date: Fri, 28 Apr 2023 15:36:40 +0200
Subject: [PATCH 6/6] fix: add id back to householdDTO, so create household
 works

---
 api/src/main/java/no/freshify/api/model/dto/HouseholdDTO.java | 1 +
 1 file changed, 1 insertion(+)

diff --git a/api/src/main/java/no/freshify/api/model/dto/HouseholdDTO.java b/api/src/main/java/no/freshify/api/model/dto/HouseholdDTO.java
index 7b1ba35..9d7cf05 100644
--- a/api/src/main/java/no/freshify/api/model/dto/HouseholdDTO.java
+++ b/api/src/main/java/no/freshify/api/model/dto/HouseholdDTO.java
@@ -6,5 +6,6 @@ import lombok.Setter;
 @Getter
 @Setter
 public class HouseholdDTO {
+    private Long id;
     private String name;
 }
-- 
GitLab