// DealState 상태 전환 // https://stately.ai/viz/6388268c-a7ee-43fb-978f-1eeadef6a75b import { pito } from 'pito'; import { DealAction } from './deal-state-xs'; export { DealAction, DealStateFSM, toFSMState } from './deal-state-xs'; // ================================================================================= // // ================================================================================= export const DealStateContext = pito.Obj({ buyer : pito.Bool(), seller: pito.Bool(), owner : pito.Bool(), iter : pito.Num(), }); export type DealStateContext = pito.Type; export const DealStateEvent = pito.Uobj('type') .case('MARGIN-PAY', { caller: pito.Ulit('buyer', 'seller') }) // 계약금 납부 - buyer or owner .case('CONTRACT-UPDATE', { caller: pito.Ulit("seller", "buyer", "owner") }) // 계약서 업데이트 - seller .case('CONTRACT-COMPLETE', { caller: pito.Ulit("seller") }) // 계약서 작성 완료 - seller .case('CONTRACT-VERIFY', { caller: pito.Ulit('buyer', 'owner') }) // 계약서 확인 완료 - buyer or owner .case('CONTRACT-SIGN', { caller: pito.Ulit('buyer', 'seller', 'owner') }) // 계약서 서명 - buyer or owner or seller // .case('DOWN-PAY', ({ caller: pito.Ulit("buyer") })) // 계약금납부 - buyer .case('DOWN-COMPLETE', ({ interim: pito.Opt(pito.Int()), caller: pito.Ulit("owner") })) // 계약금 납부 확인 - seller // .case('INTERIM-PAY', ({ caller: pito.Ulit("buyer") })) // 중도금 납부 - buyer .case('INTERIM-COMPLETE', ({ caller: pito.Ulit("owner") })) // 중도금 납부 확인 - seller // .case('BALANCE-PAY', ({ caller: pito.Ulit("buyer") })) // 잔금 납부 - buyer .case('BALANCE-COMPLETE', ({ caller: pito.Ulit("owner") })) // 잔금 납부 확인 - seller // .case("BROKERAGE-FEE-PAY", ({ caller: pito.Ulit("buyer", "owner") })) // 매수자 중개수수료 납부 - buyer and owner .case("BROKERAGE-FEE-COMPLETE", ({ caller: pito.Ulit("seller") })) // 중개인 수수료 확인 - seller // .case('CANCEL', ({ caller: pito.Ulit('buyer', 'seller', 'owner') })) // 취소 - buyer or owner or seller .end(); export type DealStateEvent = pito.Type; export const DealState = pito.Uobj('value') .case(DealAction.Idle, ({ context: DealStateContext })) .case(DealAction.Margin, ({ context: DealStateContext })) .case(DealAction.Contract, ({ context: DealStateContext })) .case(DealAction.ContractEnd, ({ context: DealStateContext })) .case(DealAction.ContractVerifing, ({ context: DealStateContext })) .case(DealAction.ContractSigning, ({ context: DealStateContext })) .case(DealAction.Down, ({ context: DealStateContext })) .case(DealAction.Interim, ({ context: DealStateContext })) .case(DealAction.Balance, ({ context: DealStateContext })) .case(DealAction.BrokerageFee, ({ context: DealStateContext })) .case(DealAction.Complete, ({ context: DealStateContext })) .case(DealAction.Cancel, ({ context: DealStateContext })) .end(); // ================================================================================= // // ================================================================================= export type DealState = pito.Type;