>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