>User: 409 Conflict else Không trùng Note over Service: 2. Tính tổng giá cả Service->>Owner"> >User: 409 Conflict else Không trùng Note over Service: 2. Tính tổng giá cả Service->>Owner"> >User: 409 Conflict else Không trùng Note over Service: 2. Tính tổng giá cả Service->>Owner">
sequenceDiagram
participant User as Frontend/User
participant API as API Controller
participant Service as Order Service
participant PCR as place_calendar_relations
participant Orders as orders
participant OS as order_status
participant ODP as order_date_prices
participant PCO as place_calendar_orders
participant Owner as owner_accounts
participant UserAcc as user_accounts
participant Places as places
User->>API: POST /api/v1/order/register<br/>(reservedDays, orderStatus, ...)
API->>Service: save(orderData)
Note over Service: 1. Set startDate, endDate
Service->>PCR: SELECT value<br/>WHERE place_id, regist_date<br/>AND (value = 2 OR value = 3)
PCR-->>Service: Kiểm tra trùng ngày
alt Có trùng ngày với order CONFIRMED
Service-->>API: Error: "既に登録されている日付のため、登録できません。"
API-->>User: 409 Conflict
else Không trùng
Note over Service: 2. Tính tổng giá cả
Service->>Owner: SELECT owner info
Owner-->>Service: ownerAccountId, ownerAccountName
Service->>UserAcc: SELECT user info
UserAcc-->>Service: userCompanyName, userAccountName, ...
Service->>Places: SELECT place info
Places-->>Service: placeId, facilityName, ...
Note over Service: 3. Insert Order
Service->>Orders: INSERT order<br/>(totalPrice, startDate, endDate, ...)
Orders-->>Service: orderId (mới tạo)
Service->>OS: INSERT order_status<br/>(orderId, orderStatus, replyStatus)
OS-->>Service: Success
Service->>ODP: BULK INSERT<br/>order_date_prices<br/>(cho từng ngày trong reservedDays)
ODP-->>Service: Success
Note over Service,PCO: 4. Insert vào place_calendar_orders<br/>
loop Với mỗi ngày trong reservedDays
Service->>PCO: INSERT<br/>(place_id, order_id,<br/>order_owner_id, regist_date)
PCO-->>Service: Success
end
Note over Service,PCR: 5. Update place_calendar_relations<br/>(Chỉ lưu order_id khi value = 2)
alt orderStatus = 2 (実施確定)
loop Với mỗi ngày trong reservedDays
Service->>PCR: UPSERT<br/>(place_id, regist_date,<br/>value = 2,<br/>order_id, order_owner_id)
PCR-->>Service: Success
end
else orderStatus = 1 hoặc 3
loop Với mỗi ngày trong reservedDays
Service->>PCR: UPSERT<br/>(place_id, regist_date,<br/>value = 1,<br/>order_id = null,<br/>order_owner_id = null)
PCR-->>Service: Success
end
end
Service-->>API: Success
API-->>User: 200 OK
end