Warehouse Service
Overview
Warehouses represent physical storage locations where stock is held.
Each Warehouse defines:
- unique identifier code (
Code) - descriptive name (
Name) - optional address reference (
AddressId) - active status flag (
IsActive)
Warehouses are used by Stock Items to define where products are physically stored and are required for all inventory operations. Each warehouse can hold multiple products, and products can exist in multiple warehouses.
All warehouse operations are tenant-aware and fully audited.
Endpoints
GET
/api/v1/Warehouse/GetAllWarehouse
Returns all warehouses regardless of active status.
Behavior:
- Returns a list of
WarehouseModel - Returns
200with an empty list if no warehouses exist
Response:
List<WarehouseModel>
Authorization:
- Requires Bearer Token
GET
/api/v1/Warehouse/GetAllWarehouseFilteredByActive?isActive={isActive}
Returns warehouses filtered by active status.
Query parameters:
isActive(bool, required) - filter by active status
Behavior:
- Filters by
IsActiveflag - Returns a list of
WarehouseModel - Returns
200with an empty list if no warehouses match the filter
Response:
List<WarehouseModel>
Authorization:
- Requires Bearer Token
GET
/api/v1/Warehouse/GetWarehouseById/{id}
Returns a single warehouse by its ID.
Route parameters:
id(long, required)
Behavior:
- Looks up warehouse by
Id - Returns warehouse details if found
Errors:
- Returns
404if warehouse does not exist
Response:
WarehouseModel
Authorization:
- Requires Bearer Token
GET
/api/v1/Warehouse/GetWarehouseByCode/{code}
Returns a single warehouse by its unique code.
Route parameters:
code(string, required)
Behavior:
- Looks up warehouse by
Code - Returns warehouse details if found
Errors:
- Returns
404if warehouse does not exist
Response:
WarehouseModel
Authorization:
- Requires Bearer Token
POST
/api/v1/Warehouse/AddNewWarehouse
Creates a new warehouse.
Request body (WarehouseModel):
Code(string, required, must not be empty)Name(string, required, must not be empty)AddressId(long?, optional)IsActive(bool?, optional, defaults tofalseif not provided)
Behavior:
- Validation is enforced in the service layer (
IsReadyToAdd()) - Prevents duplicates by enforcing uniqueness of
Code - Successful creation writes an audit log entry
Errors:
- Returns
400if:- request body is invalid (
IsReadyToAdd()is false) - warehouse with the same
Codealready exists - database insert - or other internal error occurs
- request body is invalid (
Response:
200 OKwith message:"New warehouse added"400 Bad Requestwith message:"Add new warehouse failed"
Authorization:
- Requires Bearer Token
PUT
/api/v1/Warehouse/UpdateWarehouseById/{id}
Updates an existing warehouse.
Route parameters:
id(long, required)
Request body (WarehouseModel):
Code(string, optional)Name(string, optional)AddressId(long?, optional)IsActive(bool?, optional)
Behavior:
- The controller sets
Idfrom the route - Validation is enforced (
IsReadyToUpdate()requiresId > 0,Codenot empty,Namenot empty) - Updates only fields provided in body:
Codeupdated if not null or whitespaceNameupdated if not null or whitespaceAddressIdupdated if not nullIsActiveupdated if not null (defaults tofalseif provided as null)
- Successful update writes an audit log entry
Errors:
- Returns
400if:- request body is invalid (
IsReadyToUpdate()is false) - warehouse does not exist
- request body is invalid (
Response:
200 OKwith message:"Update warehouse successful"400 Bad Requestwith message:"Update warehouse failed"
Authorization:
- Requires Bearer Token
DELETE
/api/v1/Warehouse/DeleteWarehouseById/{id}
Deletes a warehouse by its ID.
Route parameters:
id(long, required)
Behavior:
- Performs a hard delete
- Successful deletion writes an audit log entry
Errors:
- Returns
400with message"Warehouse not found"if the warehouse does not exist
Response:
200 OKwith message:"Warehouse deleted successfully"400 Bad Requestwith message:"Warehouse not found"
Authorization:
- Requires Bearer Token
Notes
- Validation is enforced in the service layer, not via model attributes
Codemust be unique across all warehousesIsActivedefaults tofalseif not provided during creation or update- Deleting a warehouse does not cascade to related stock items (consider adding validation to prevent deletion if stock items exist)
- Internal errors are logged and not exposed to API consumers