рдСрдлрд╝рд▓рд╛рдЗрди-рдкреНрд░рдердо рдореЛрдмрд╛рдЗрд▓ рдРрдк рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕рд┐рдВрдХ: рдЯрдХрд░рд╛рд╡, рдкреБрди:рдкреНрд░рдпрд╛рд╕, UX
рд╕реНрдкрд╖реНрдЯ рдЯрдХрд░рд╛рд╡ рдирд┐рдпрдо, рдкреБрдирдГрдкреНрд░рдпрд╛рд╕ рд▓реЙрдЬрд┐рдХ рдФрд░ рдиреЗрдЯрд┐рд╡ Kotlin рд╡ SwiftUI рдРрдкреНрд╕ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдкреЗрдВрдбрд┐рдВрдЧ рдЪреЗрдВрдЬ UX рдХреЗ рд╕рд╛рде рдСрдлрд╝рд▓рд╛рдЗрди-рдкреНрд░рдердо рдореЛрдмрд╛рдЗрд▓ рдРрдк рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕рд┐рдВрдХ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВред

рд╕рдорд╕реНрдпрд╛: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдлрд╝рд▓рд╛рдЗрди рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬрдмрдХрд┐ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ
рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдЕрдЪреНрдЫреЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рд▓рд┐рдлреНрдЯ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдХреЗ рдХреЛрдиреЗ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╛ рд╕рдмрд╡реЗ рд╕реБрд░рдВрдЧ рдореЗрдВред рдРрдк рдЪрд▓рддрд╛ рд░рд╣рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рд╡реЗ Save рджрдмрд╛рддреЗ рд╣реИрдВ, рдиреЛрдЯ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рд╕реНрдЯреЗрдЯрд╕ рдмрджрд▓рддреЗ рд╣реИрдВ, рдпрд╛ рдирдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рддреЗ рд╣реИрдВред рд╕реНрдХреНрд░реАрди рддреБрд░рдВрдд рдЕрдкрдбреЗрдЯ рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рд╕рдм рдХреБрдЫ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИред
рдмрд╛рдж рдореЗрдВ, рдХрдиреЗрдХреНрд╢рди рд╡рд╛рдкрд╕ рдЖрддрд╛ рд╣реИ рдФрд░ рдРрдк рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореЗрдВ рдХреИрдЪ рдЕрдк рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рдпрд╣реАрдВ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕рд┐рдВрдХ рд▓реЛрдЧреЛрдВ рдХреЛ рдЪрдХрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдЕрдЧрд░ рдРрдк рд╕рд╛рд╡рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рддреЛ рд╡рд╣реА рдПрдХреНрд╢рди рджреЛ рдмрд╛рд░ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рдбреБрдкреНрд▓рд┐рдХреЗрдЯ), рдпрд╛ рд╕рд░реНрд╡рд░ рдХрд╛ рдирдпрд╛ рдЪреЗрдВрдЬ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЕрднреА рдХрд┐рдП рдЧрдП рдЪреЗрдВрдЬ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ (рдЦреЛрдП рд╣реБрдП рдПрдбрд┐рдЯ)ред рдХрднреА-рдХрднреА рдРрдк рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдЕрд╡рд╕реНрдерд╛рдПрдБ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬреИрд╕реЗ "Saved" рдФрд░ "Not saved" рдПрдХ рд╕рд╛рде, рдпрд╛ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рд╕рд┐рдВрдХ рдХреЗ рдмрд╛рдж рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИред
рдЯрдХрд░рд╛рд╡ рд╕рд░рд▓ рд╣реИ: рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдкрд░ рджреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдП рдЬрдм рддрдХ рдРрдк рдЙрдиреНрд╣реЗрдВ рдореЗрд▓ рдирд╣реАрдВ рдХрд░ рдкрд╛рдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рдкреЛрд░реНрдЯ рдПрдЬреЗрдВрдЯ рдЯрд┐рдХрдЯ рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдХреЛ "High" рдХрд░ рджреЗрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рд╡рд╣ рдСрдлрд╝рд▓рд╛рдЗрди рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдЯреАрдордореЗрдЯ рдСрдирд▓рд╛рдЗрди рдЬрд╛рдХрд░ рдЯрд┐рдХрдЯ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрддрд╛ рд╣реИред рдЬрдм рдСрдлрд╝рд▓рд╛рдЗрди рдлреЛрди рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рджреЛрдиреЛрдВ рдЪреЗрдВрдЬ рдмрд┐рдирд╛ рдирд┐рдпрдо рдХреЗ рд╕рд╛рдлрд╝-рд╕реБрдерд░реЗ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗред
рд▓рдХреНрд╖реНрдп рдСрдлрд╝рд▓рд╛рдЗрди рдХреЛ рдкрд░рд┐рдкреВрд░реНрдг рдмрдирд╛рдирд╛ рдирд╣реАрдВ рд╣реИред рд▓рдХреНрд╖реНрдп рдЗрд╕реЗ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рдмрдирд╛рдирд╛ рд╣реИ:
- рд▓реЛрдЧ рдмрд┐рдирд╛ рдЪрд┐рдВрддрд╛ рдХреЗ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦ рд╕рдХреЗрдВ рдХрд┐ рдЙрдирдХрд╛ рдХрд╛рдо рдЦреЛ рдЬрд╛рдПрдЧрд╛ред
- рд╕рд┐рдВрдХ рдмрд╛рдж рдореЗрдВ рд╣реЛ, рдмрд┐рдирд╛ рд░рд╣рд╕реНрдпрдордп рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЗред
- рдЬрдм рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХреЛ рдзреНрдпрд╛рди рдЪрд╛рд╣рд┐рдП, рддреЛ рдРрдк рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдмрддрд╛рдП рдХрд┐ рдХреНрдпрд╛ рд╣реБрдЖ рдФрд░ рдЕрдЧрд▓рд╛ рдХрджрдо рдХреНрдпрд╛ рд╣реИред
рдпрд╣ рдмрд╛рдд рдЪрд╛рд╣реЗ рдЖрдк Kotlin/SwiftUI рдореЗрдВ рд╣реИрдВрдб-рдХреЛрдб рдХрд░ рд░рд╣реЗ рд╣реЛрдВ рдпрд╛ AppMaster рдЬреИрд╕реЗ рдиреЛ-рдХреЛрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рд╕реЗ рдиреЗрдЯрд┐рд╡ рдРрдк рдмрдирд╛ рд░рд╣реЗ рд╣реЛрдВ, рджреЛрдиреЛрдВ рдкрд░ рд▓рд╛рдЧреВ рд╣реЛрддреА рд╣реИред рдЪреБрдиреМрддреА UI рд╡рд┐рдЬреЗрдЯреНрд╕ рдирд╣реАрдВ рд╣реИред рдЪреБрдиреМрддреА рдпрд╣ рддрдп рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдлрд╝рд▓рд╛рдЗрди рд╣реИ рддреЛ рдРрдк рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреИрд╕рд╛ рд╣реЛрдЧрд╛ред
рдПрдХ рд╕рд░рд▓ рдСрдлрд╝рд▓рд╛рдЗрди-рдкреНрд░рдердо рдореЙрдбрд▓ (рдмрд┐рдирд╛ рдЬрд╛рд░реНрдЧрди рдХреЗ)
рдПрдХ рдСрдлрд╝рд▓рд╛рдЗрди-рдкреНрд░рдердо рдРрдк рдорд╛рдирддрд╛ рд╣реИ рдХрд┐ рдлреЛрди рдХрднреА-рдХрднреА рдиреЗрдЯрд╡рд░реНрдХ рдЦреЛ рджреЗрдЧрд╛, рд▓реЗрдХрд┐рди рдРрдк рдХреЛ рдлрд┐рд░ рднреА рдЙрдкрдпреЛрдЧреА рдорд╣рд╕реВрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╕реНрдХреНрд░реАрди рдХреЛ рд▓реЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдмрдЯрди рддрдм рднреА рдХрд╛рдо рдХрд░рдиреЗ рдЪрд╛рд╣рд┐рдП рдЬрдм рд╕рд░реНрд╡рд░ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛред
рдЪрд╛рд░ рдЯрд░реНрдореНрд╕ рдЕрдзрд┐рдХрддрд░ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░рддреЗ рд╣реИрдВ:
- Local cache: рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдбреЗрдЯрд╛ рддрд╛рдХрд┐ рдРрдк рддреБрд░рдВрдд рдХреБрдЫ рджрд┐рдЦрд╛ рд╕рдХреЗред
- Sync queue: рдЙрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рд╕реВрдЪреА рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдСрдлрд╝рд▓рд╛рдЗрди (рдпрд╛ рдлреНрд▓реИрдХрд╝реА рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рджреМрд░рд╛рди) рд▓реАрдВред
- Server truth: рдмреИрдХрдПрдВрдб рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд╡рд╣ рд╕рдВрд╕реНрдХрд░рдг рдЬрд┐рд╕реЗ рдЕрдВрддрддрдГ рд╕рднреА рд╕рд╛рдЭрд╛ рдХрд░рддреЗ рд╣реИрдВред
- Conflict: рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдХреНрдпреВ рдореЗрдВ рд░рдЦрд╛ рдмрджрд▓рд╛рд╡ рдЕрдм рд╕рд╛рдлрд╝ рддрд░реАрдХреЗ рд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рдкрд╛рддрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╕рд░реНрд╡рд░ рд╕рдВрд╕реНрдХрд░рдг рдмрджрд▓ рдЧрдпрд╛ред
рдПрдХ рдЙрдкрдпреЛрдЧреА рдорд╛рдирд╕рд┐рдХ рдореЙрдбрд▓ рдкрдврд╝рдиреЗ (reads) рдФрд░ рд▓рд┐рдЦрдиреЗ (writes) рдХреЛ рдЕрд▓рдЧ рдХрд░рдирд╛ рд╣реИред
Reads рдЖрдорддреМрд░ рдкрд░ рд╕реАрдзреЗ-рд╕рд╛рджреЗ рд╣реЛрддреЗ рд╣реИрдВ: рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдЙрдкрд▓рдмреНрдз рдбреЗрдЯрд╛ рджрд┐рдЦрд╛рдПрдБ (рдЕрдХреНрд╕рд░ рд▓реЛрдХрд▓ рдХреИрд╢ рд╕реЗ), рдлрд┐рд░ рдиреЗрдЯрд╡рд░реНрдХ рд▓реМрдЯрдиреЗ рдкрд░ рдЪреБрдкрдЪрд╛рдк рд░рд┐рдлреНрд░реЗрд╢ рдХрд░реЗрдВред
Writes рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВред рдкреВрд░реА рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдПрдХ рд╢реЙрдЯ рдореЗрдВ "рд╕рд╣реЗрдЬрдиреЗ" рдкрд░ рднрд░реЛрд╕рд╛ рдордд рдХрд░реЗрдВред рдпрд╣ рдСрдлрд╝рд▓рд╛рдЗрди рд╣реЛрддреЗ рд╣реА рдЯреВрдЯ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЙрд╕реЗ рдЫреЛрдЯреЗ рдПрдВрдЯреНрд░реАрдЬрд╝ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреЗрдВрдЬ рд▓реЙрдЧ рдореЗрдВ рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг: тАЬstatus рдХреЛ Approved рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛тАЭ, тАЬрдХрдореЗрдВрдЯ X рдЬреЛрдбрд╝рд╛тАЭ, тАЬquantity 2 рд╕реЗ 3 рдХрд┐рдпрд╛редтАЭ рд╣рд░ рдПрдВрдЯреНрд░реА рдХреЛ рдПрдХ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдФрд░ ID рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдХреНрдпреВ рдореЗрдВ рдбрд╛рд▓реЗрдВред рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕рд┐рдВрдХ рддрдм рдЗрд╕реЗ рдбрд┐рд▓реАрд╡рд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИ рдЬрдмрдХрд┐ рдЪреЗрдВрдЬреЗрдЬ pending рд╕реЗ synced рд╣реЛрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк AppMaster рдЬреИрд╕реЗ рдиреЛ-рдХреЛрдб рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рднреА рдЖрдк рдпрд╣реА рдмрд┐рд▓реНрдбрд┐рдВрдЧ рдмреНрд▓реЙрдХреНрд╕ рдЪрд╛рд╣реЗрдВрдЧреЗ: рдлрд╛рд╕реНрдЯ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдХреИрд╢реНрдб рд░реАрдбреНрд╕ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдПрдХ рд╕реНрдкрд╖реНрдЯ рдХреНрдпреВ рдЬрд┐рд╕реЗ рд░реАрдЯреНрд░рд╛рдИ, рдорд░реНрдЬ, рдпрд╛ рдЯрдХрд░рд╛рд╡ рд╣реЛрдиреЗ рдкрд░ рдлреНрд▓реИрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред
рдирд┐рд░реНрдгрдп рдХрд░реЗрдВ рдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдСрдлрд╝рд▓рд╛рдЗрди рд╕рдкреЛрд░реНрдЯ рдЪрд╛рд╣рд┐рдП
рдСрдлрд╝рд▓рд╛рдЗрди-рдкреНрд░рдердо рдХрд╛ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ "рд╕рдм рдХреБрдЫ рдмрд┐рдирд╛ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ"тАФрдпрд╣ рд╡рд╛рджрд╛ рдХрдИ рдРрдкреНрд╕ рдХреЛ рдореБрд╢реНрдХрд┐рд▓ рдореЗрдВ рдбрд╛рд▓ рджреЗрддрд╛ рд╣реИред рдЙрдиреНрд╣реАрдВ рд╣рд┐рд╕реНрд╕реЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдСрдлрд╝рд▓рд╛рдЗрди рд╕рдкреЛрд░реНрдЯ рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╛рдХреА рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдСрдирд▓рд╛рдЗрди-рдУрдирд▓реА рд░рдЦреЗрдВред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЗрд░рд╛рджреЗ рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рд╕реЛрдЪреЗрдВ: рд▓реЛрдЧ рдмреЗрд╕рдореЗрдВрдЯ, рдлреНрд▓рд╛рдЗрдЯ, рдпрд╛ рд╡реЗрдпрд░рд╣рд╛рдЙрд╕ рдореЗрдВ рдХрд┐рд╕ рдХрд╛рдо рдХреЛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдПрдХ рдЕрдЪреНрдЫрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдпрд╣ рд╣реИ рдХрд┐ рд░реЛрдЬрд╝рдорд░реНрд░рд╛ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдмрдирд╛рдирд╛/рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рд╕рдкреЛрд░реНрдЯ рдХрд░реЗрдВ, рдФрд░ рд╡реЗ рдХрд╛рд░реНрдп рдмреНрд▓реЙрдХ рдХрд░реЗрдВ рдЬрд╣рд╛рдБ "рдирд╡реАрдирддрдо рд╕рддреНрдп" рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред
рдСрдлрд╝рд▓рд╛рдЗрди-рдлреНрд░реЗрдВрдбрд▓реА рдПрдХ рдкреНрд░реИрдХреНрдЯрд┐рдХрд▓ рд╕реЗрдЯ рдореЗрдВ рдЕрдХреНрд╕рд░ рдХреЛрд░ рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдмрдирд╛рдирд╛ рдФрд░ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ (рдиреЛрдЯреНрд╕, рдЯрд╛рд╕реНрдХ, рдЗрдВрд╕реНрдкреЗрдХреНрд╢рди, рдЯрд┐рдХрдЯ), рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рдбреНрд░рд╛рдлреНрдЯ рдХрд░рдирд╛, рдФрд░ рдлрд╝реЛрдЯреЛ рдЕрдЯреИрдЪ рдХрд░рдирд╛ (рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕реНрдЯреЛрд░, рдмрд╛рдж рдореЗрдВ рдЕрдкрд▓реЛрдб) рд╢рд╛рдорд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рдбрд┐рд▓реАрдЯ рднреА рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдкрд░ рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕реЙрдлреНрдЯ рдбрд┐рд▓реАрдЯ рд░рдЦреЗрдВ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рдХрдиреНрдлрд░реНрдо рд╣реЛрдиреЗ рддрдХ undo рд╡рд┐рдВрдбреЛ рджреЗрдВред
рдЕрдм рддрдп рдХрд░реЗрдВ рдХрд┐ рдХреНрдпрд╛ рд░реАрдпрд▓-рдЯрд╛рдЗрдо рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЬреЛрдЦрд┐рдо рдмрд╣реБрдд рдЬрд╝реНрдпрд╛рджрд╛ рд╣реИред рдкреЗрдореЗрдВрдЯреНрд╕, рдкрд░рдорд┐рд╢рди рдЪреЗрдВрдЬ, рдЕрдкреНрд░реВрд╡рд▓реНрд╕, рдФрд░ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдп рдЖрдорддреМрд░ рдкрд░ рдХрдиреЗрдХреНрд╢рди рдХреА рдорд╛рдВрдЧ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╕рд░реНрд╡рд░ рдЪреЗрдХ рдХреЗ рдмрд┐рдирд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХрд┐ рдПрдХреНрд╢рди рд╡реИрдз рд╣реИ, рддреЛ рдЙрд╕реЗ рдСрдлрд╝рд▓рд╛рдЗрди рдЕрдиреБрдорддрд┐ рди рджреЗрдВред рдПрдХ рд╕реНрдкрд╖реНрдЯ "рдХрдиреЗрдХреНрд╢рди рдЪрд╛рд╣рд┐рдП" рд╕рдВрджреЗрд╢ рджрд┐рдЦрд╛рдПрдБ, рди рдХрд┐ рдПрдХ рд░рд╣рд╕реНрдпрдордп рддреНрд░реБрдЯрд┐ред
рддрд╛рдЬрд╝рдЧреА рдХреЗ рд▓рд┐рдП рдЕрдкреЗрдХреНрд╖рд╛рдПрдБ рд╕реЗрдЯ рдХрд░реЗрдВред "рдСрдлрд╝рд▓рд╛рдЗрди" рдмрд╛рдЗрдирд░реА рдирд╣реАрдВ рд╣реИред рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ рдХрд┐ рдбреЗрдЯрд╛ рдХрд┐рддрдирд╛ рдкреБрд░рд╛рдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: рдорд┐рдирдЯ, рдШрдВрдЯреЗ, рдпрд╛ "рдЕрдЧрд▓реА рдмрд╛рд░ рдРрдк рдЦреБрд▓рдиреЗ рдкрд░"ред UI рдореЗрдВ рдпрд╣ рдирд┐рдпрдо рд╕рд░рд▓ рд╢рдмреНрджреЛрдВ рдореЗрдВ рд░рдЦреЗрдВ, рдЬреИрд╕реЗ "Last updated 2 hours ago" рдФрд░ "Syncing when online"ред
рдЕрдВрдд рдореЗрдВ, рддреЗрдЬреА рд╕реЗ рдЯрдХрд░рд╛рд╡ рд╡рд╛рд▓реЗ рдбреЗрдЯрд╛ рдХреЛ рдЬрд▓реНрджреА рдлреНрд▓реИрдЧ рдХрд░реЗрдВред рдЗрдиреНрд╡реЗрдВрдЯрд░реА рдХрд╛рдЙрдВрдЯреНрд╕, рд╕рд╛рдЭрд╛ рдЯрд╛рд╕реНрдХ, рдФрд░ рдЯреАрдо рд╕рдВрджреЗрд╢ рдЕрдХреНрд╕рд░ рдЯрдХрд░рд╛рд╡ рдХреЗ рдХреЗрдВрджреНрд░ рд╣реЛрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдХрдИ рд▓реЛрдЧ рддреЗрдЬреА рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрдирдХреЗ рд▓рд┐рдП рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдХрд┐ рдСрдлрд╝рд▓рд╛рдЗрди рд╕рдВрдкрд╛рджрдиреЛрдВ рдХреЛ рдбреНрд░рд╛рдлреНрдЯ рддрдХ рд╕реАрдорд┐рдд рд░рдЦреЗрдВ, рдпрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдПрдХрд▓ рд╡реИрд▓реНрдпреВ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЗрд╡реЗрдВрдЯреНрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рдХреИрдкреНрдЪрд░ рдХрд░реЗрдВред
рдЕрдЧрд░ рдЖрдк AppMaster рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдирд┐рд░реНрдгрдп рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдФрд░ рдмрд┐рдЬрдиреЗрд╕ рдирд┐рдпрдо рдореЙрдбрд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ рддрд╛рдХрд┐ рдРрдк рдСрдлрд╝рд▓рд╛рдЗрди рд╕реБрд░рдХреНрд╖рд┐рдд рдбреНрд░рд╛рдлреНрдЯреНрд╕ рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХреЗ рдЬрдмрдХрд┐ рдЬреЛрдЦрд┐рдо рд╡рд╛рд▓реЗ рдХреНрд░рд┐рдпрд╛рдПрдБ рдСрдирд▓рд╛рдЗрди-рдУрдирд▓реА рд░рд╣реЗрдВред
рд╕рд┐рдВрдХ рдХреНрдпреВ рдбрд┐рдЬрд╝рд╛рдЗрди: рд╣рд░ рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдЖрдк рдХреНрдпрд╛ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВ
рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдлрд╝рд▓рд╛рдЗрди рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ "рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рд╕рд┐рдВрдХ" рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдордд рдХрд░реЗрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рд┐рдВрдХ рдХрд░реЗрдВред рдПрдХ рд╕реНрдкрд╖реНрдЯ рдПрдХреНрд╢рди рдХреНрдпреВ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕рд┐рдВрдХ рдХреА рд░реАрдврд╝ рд╣реИ, рдФрд░ рдЬрдм рдЪреАрдЬрд╝реЗрдВ рдЧрд▓рдд рд╣реЛрддреА рд╣реИрдВ рддреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рд░рд╣рддрд╛ рд╣реИред
рдПрдХреНрд╢рди рдЫреЛрдЯреЗ рдФрд░ рдорд╛рдирд╡-рд╕рдВрдЧрдд рд░рдЦреЗрдВ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд┐рдпрд╛ рдерд╛:
- рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдирд╛
- рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝реАрд▓реНрдб(рд╕) рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛
- рд╕реНрдЯреЗрдЯрд╕ рдмрджрд▓рдирд╛ (submit, approve, archive)
- рдбрд┐рд▓реАрдЯ (рд╕рд░реНрд╡рд░ рдХрдиреНрдлрд░реНрдо рд╣реЛрдиреЗ рддрдХ рд╕реЙрдлреНрдЯ рдбрд┐рд▓реАрдЯ рдмреЗрд╣рддрд░)
рдЫреЛрдЯреА рдХреНрд░рд┐рдпрд╛рдПрдБ рдбрд┐рдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рд╣реЛрддреА рд╣реИрдВред рд╕рдкреЛрд░реНрдЯ рдХреЛ рдорджрдж рдХрд░рддреЗ рд╕рдордп "Changed status Draft -> Submitted" рдкрдврд╝рдирд╛ рд╡рд┐рд╢рд╛рд▓ JSON рдмреНрд▓реЙрдм рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рд╕реЗ рдХрд╣реАрдВ рдЖрд╕рд╛рди рд╣реИред
рд╣рд░ рдХреНрдпреВ рдХрд┐рдП рдЧрдП рдПрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдЗрддрдирд╛ рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд░рдЦреЗрдВ рдХрд┐ рдЙрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд░реАрдкреНрд▓реЗ рдХрд░ рд╕рдХреЗрдВ рдФрд░ рдЯрдХрд░рд╛рд╡ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХреЗрдВ:
- рд░рд┐рдХреЙрд░реНрдб рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ (рдФрд░ рдирдП рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд▓реЛрдХрд▓ ID)
- рдПрдХреНрд╢рди рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдФрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛
- рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рдПрдХреНрд╕рдкреЗрдХреНрдЯреЗрдб рд╡рд░реНрдЬрди (рдпрд╛ рдЖрдЦрд┐рд░реА рдЬреНрдЮрд╛рдд рдЕрдкрдбреЗрдЯ рд╕рдордп)
- рдкреЗрд▓реЛрдб (рдХрд┐рд╕ рдлрд╝реАрд▓реНрдб рдмрджрд▓реЗ, рд╕рд╛рде рдореЗрдВ рдкреБрд░рд╛рдирд╛ рдорд╛рди рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ)
- Idempotency key (рдПрдХ рдпреВрдирд┐рдХ рдПрдХреНрд╢рди ID рддрд╛рдХрд┐ retries рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рди рдмрдирд╛рдПрдВ)
рдпрд╣ expected version рдИрдорд╛рдирджрд╛рд░ рдЯрдХрд░рд╛рд╡ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреА рдХреБрдВрдЬреА рд╣реИред рдЕрдЧрд░ рд╕рд░реНрд╡рд░ рд╡рд░реНрдЬрди рдЖрдЧреЗ рдмрдврд╝ рдЪреБрдХрд╛ рд╣реИ, рддреЛ рдЖрдк рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдлреИрд╕рд▓рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрдЫ рд╕рдХрддреЗ рд╣реИрдВ рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдЪреБрдкрдЪрд╛рдк рдХрд┐рд╕реА рдФрд░ рдХрд╛ рдбреЗрдЯрд╛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░ рджреЗрдВред
рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдБ рд╕рд╛рде рдореЗрдВ рд▓рд╛рдЧреВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЙрдиреНрд╣реЗрдВ рдПрдХ рд╣реА рд╕реНрдЯреЗрдк рдХреЗ рд░реВрдк рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг: "Create order" рдФрд░ "Add three line items" рдХреЛ рдПрдХ рдпреВрдирд┐рдЯ рдХреА рддрд░рд╣ рд╕рдлрд▓ рдпрд╛ рдЕрд╕рдлрд▓ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ group ID (рдпрд╛ transaction ID) рд░рдЦреЗрдВ рддрд╛рдХрд┐ рд╕рд┐рдВрдХ рдЗрдВрдЬрд┐рди рдЙрдиреНрд╣реЗрдВ рд╕рд╛рде рднреЗрдЬ рд╕рдХреЗ рдФрд░ рдпрд╛ рддреЛ рд╕рдм рдХрдорд┐рдЯ рд╣реЛрдВ рдпрд╛ рд╕рдм pending рд░рд╣реЗрдВред
рдЪрд╛рд╣реЗ рдЖрдк рд╣рд╛рде рд╕реЗ рдмрдирд╛рдПрдВ рдпрд╛ AppMaster рдореЗрдВ, рд▓рдХреНрд╖реНрдп рд╡рд╣реА рд╣реИ: рд╣рд░ рдмрджрд▓рд╛рд╡ рдПрдХ рдмрд╛рд░ рд░рд┐рдХреЙрд░реНрдб рд╣реЛ, рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд░реАрдкреНрд▓реЗ рд╣реЛ, рдФрд░ рдЬрдм рдХреБрдЫ рдореИрдЪ рди рд╣реЛ рддреЛ рд╕рдордЭ рдореЗрдВ рдЖ рд╕рдХреЗред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдордЭрдиреЗ рдпреЛрдЧреНрдп рдЯрдХрд░рд╛рд╡ рд╕рдорд╛рдзрд╛рди рдирд┐рдпрдо
рдЯрдХрд░рд╛рд╡ рд╕рд╛рдорд╛рдиреНрдп рд╣реИрдВред рд▓рдХреНрд╖реНрдп рдЙрдиреНрд╣реЗрдВ рдЕрд╕рдВрднрд╡ рдмрдирд╛рдирд╛ рдирд╣реАрдВ рд╣реИтАФрд▓рдХреНрд╖реНрдп рд╣реИ рдЙрдиреНрд╣реЗрдВ рджреБрд░реНрд▓рдн, рд╕реБрд░рдХреНрд╖рд┐рдд рдФрд░ рд╣реЛрдиреЗ рдкрд░ рд╕рдордЭрдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдирд╛ред
рдЙрд╕ рдХреНрд╖рдг рдХрд╛ рдирд╛рдо рд░рдЦреЗрдВ рдЬрдм рдЯрдХрд░рд╛рд╡ рд╣реЛрддрд╛ рд╣реИ: рдРрдк рдПрдХ рдмрджрд▓рд╛рд╡ рднреЗрдЬрддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдХрд╣рддрд╛ рд╣реИ, "рдпрд╣ рд░рд┐рдХреЙрд░реНрдб рдЙрд╕ рд╡рд░реНрдЬрди рдХрд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдкрдиреЗ рдПрдбрд┐рдЯ рдХрд┐рдпрд╛ рдерд╛ред" рдЗрд╕рд▓рд┐рдП рд╡рд░реНрдЬрдирд┐рдВрдЧ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
рд╣рд░ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рджреЛ рдорд╛рди рд░рдЦреЗрдВ:
- рд╕рд░реНрд╡рд░ рд╡рд░реНрдЬрди (рд╕рд░реНрд╡рд░ рдкрд░ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг)
- рдПрдХреНрд╕рдкреЗрдХреНрдЯреЗрдб рд╡рд░реНрдЬрди (рдЬрд┐рд╕ рд╡рд░реНрдЬрди рдХреЛ рдлреЛрди рдиреЗ рдПрдбрд┐рдЯ рдХрд┐рдпрд╛ рд╕рдордЭрд╛)
рдЕрдЧрд░ expected version рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рдЕрдкрдбреЗрдЯ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ рдФрд░ рд╕рд░реНрд╡рд░ рд╡рд░реНрдЬрди рдмрдврд╝рд╛рдПрдБред рдЕрдЧрд░ рдирд╣реАрдВ, рддреЛ рдЕрдкрдирд╛ рдЯрдХрд░рд╛рд╡ рдирд┐рдпрдо рд▓рд╛рдЧреВ рдХрд░реЗрдВред
рд╣рд░ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рдЪреБрдиреЗрдВ (рд╕рднреА рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рдирд╣реАрдВ)
рднрд┐рдиреНрди рдбреЗрдЯрд╛ рдХреЛ рднрд┐рдиреНрди рдирд┐рдпрдо рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╕реНрдЯреЗрдЯрд╕ рдлрд╝реАрд▓реНрдб рд▓рдВрдмреА рдиреЛрдЯ рдЬреИрд╕реА рдирд╣реАрдВ рд╣реЛрддреАред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдордЭ рдЖрдиреЗ рд╡рд╛рд▓реЗ рдирд┐рдпрдо:
- Last write wins: рдХрдо рдЬреЛрдЦрд┐рдо рд╡рд╛рд▓реЗ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ, рдЬреИрд╕реЗ рд╡реНрдпреВ рдкреНрд░реЗрдлрд░реЗрдВрд╕ред
- Merge fields: рддрдм рд╕рд░реНрд╡реЛрддреНрддрдо рдЬрдм рдлрд╝реАрд▓реНрдб рд╕реНрд╡рддрдВрддреНрд░ рд╣реЛрдВ (status рдмрдирд╛рдо notes)ред
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫреЗрдВ: рдЙрдЪреНрдЪ рдЬреЛрдЦрд┐рдо рд╡рд╛рд▓реЗ рдПрдбрд┐рдЯреНрд╕ рдХреЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рдЬреИрд╕реЗ рдХрд┐ рдХреАрдордд, рдкрд░рдорд┐рд╢рдиреНрд╕, рдпрд╛ рдЯреЛрдЯрд▓реНрд╕ред
- Server wins with a copy: рд╕рд░реНрд╡рд░ рдорд╛рди рд░рдЦреЗрдВ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдПрдбрд┐рдЯ рдПрдХ рдбреНрд░рд╛рдлреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡ рдХрд░реЗрдВ рдЬрд┐рд╕реЗ рд╡реЗ рдлрд┐рд░ рд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХреЗрдВред
AppMaster рдореЗрдВ рдпреЗ рдирд┐рдпрдо рд╡рд┐рдЬрд╝реБрдЕрд▓ рд▓реЙрдЬрд┐рдХ рд╕реЗ рдЕрдЪреНрдЫреА рддрд░рд╣ рдореИрдЪ рдХрд░рддреЗ рд╣реИрдВ: рд╡рд░реНрдЬрди рдЪреЗрдХ рдХрд░реЗрдВ, рдлрд╝реАрд▓реНрдб рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ, рдлрд┐рд░ рдкрде рдЪреБрдиреЗрдВред
рдбрд┐рд▓реАрдЯ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВ рдпрд╣ рддрдп рдХрд░реЗрдВ (рдЕрдиреНрдпрдерд╛ рдЖрдк рдбреЗрдЯрд╛ рдЦреЛ рджреЗрдВрдЧреЗ)
рдбрд┐рд▓реАрдЯреНрд╕ рдЬрдЯрд┐рд▓ рд╣реЛрддреЗ рд╣реИрдВред рд░рд┐рдХреЙрд░реНрдб рдХреЛ рддреБрд░рдВрдд рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ tombstone ("deleted" рдорд╛рд░реНрдХрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рдлрд┐рд░ рддрдп рдХрд░реЗрдВ рдХрд┐ рдЕрдЧрд░ рдХрд╣реАрдВ рдФрд░ рдХреЛрдИ рд░рд┐рдХреЙрд░реНрдб рдбрд┐рд▓реАрдЯ рдХрд░ рдЪреБрдХрд╛ рд╣реИ рддреЛ рдЖрдкрдиреЗ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдерд╛ред
рдПрдХ рд╕реНрдкрд╖реНрдЯ рдирд┐рдпрдо: "Deletes win, рдкрд░ рдЖрдк restore рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред" рдЙрджрд╛рд╣рд░рдг: рдПрдХ рд╕реЗрд▓реНрд╕рдкрд░реНрд╕рди рдСрдлрд╝рд▓рд╛рдЗрди рдЧреНрд░рд╛рд╣рдХ рдиреЛрдЯ рдПрдбрд┐рдЯ рдХрд░рддрд╛ рд╣реИ, рдЬрдмрдХрд┐ рдПрдХ рдПрдбрдорд┐рди рдиреЗ рд╡рд╣ рдЧреНрд░рд╛рд╣рдХ рд╣рдЯрд╛ рджрд┐рдпрд╛ред рдЬрдм рд╕рд┐рдВрдХ рдЪрд▓рддрд╛ рд╣реИ, рддреЛ рдРрдк рджрд┐рдЦрд╛рдП: "Customer was deleted. Restore to apply your note?" рдпрд╣ рдЪреБрдкрдЪрд╛рдк рдиреБрдХрд╕рд╛рди рд╣реЛрдиреЗ рд╕реЗ рдмрдЪрд╛рддрд╛ рд╣реИ рдФрд░ рдирд┐рдпрдВрддреНрд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рд░рдЦрддрд╛ рд╣реИред
рдкреБрдирдГрдкреНрд░рдпрд╛рд╕ рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рдЕрд╡рд╕реНрдерд╛рдПрдБ: рдЗрд╕реЗ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рд░рдЦреЗрдВ
рдЬрдм рд╕рд┐рдВрдХ рдлреЗрд▓ рд╣реЛрддрд╛ рд╣реИ, рдЕрдзрд┐рдХрд╛рдВрд╢ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛рд░рдг рд╕реЗ рдЬреНрдпрд╛рджрд╛ рдпрд╣ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрдирдХрд╛ рдХрд╛рдо рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ рдФрд░ рдЖрдЧреЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рдПрдХ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рд╕реНрдЯреЗрдЯ рдореЙрдбрд▓ рдШрдмрд░рд╛рд╣рдЯ рдФрд░ рд╕рдкреЛрд░реНрдЯ рдЯрд┐рдХрдЯреНрд╕ рдХрдо рдХрд░рддрд╛ рд╣реИред
рдПрдХ рдЫреЛрдЯрд╛, рджрд┐рдЦрдиреЗ рдпреЛрдЧреНрдп рд╕реНрдЯреЗрдЯ рдореЙрдбрд▓ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдХреНрд░реАрди рднрд░ рдореЗрдВ рд╕реБрд╕рдВрдЧрдд рд░рдЦреЗрдВ:
- Queued: рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛, рдиреЗрдЯрд╡рд░реНрдХ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛
- Syncing: рдЕрдм рднреЗрдЬрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ
- Sent: рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдХрдиреНрдлрд░реНрдо рдХрд┐рдпрд╛ рдЧрдпрд╛
- Failed: рднреЗрдЬрд╛ рдирд╣реАрдВ рдЬрд╛ рд╕рдХрд╛, рдлрд┐рд░ рд╕реЗ рдкреНрд░рдпрд╛рд╕ рд╣реЛрдЧрд╛ рдпрд╛ рдзреНрдпрд╛рди рдЪрд╛рд╣рд┐рдП
- Needs review: рднреЗрдЬрд╛ рдЧрдпрд╛, рдкрд░ рд╕рд░реНрд╡рд░ рдиреЗ рдареБрдХрд░рд╛рдпрд╛ рдпрд╛ рдлреНрд▓реИрдЧ рдХрд┐рдпрд╛
рд░реАрдЯреНрд░рд╛рдИ рдмреИрдЯрд░реА рдФрд░ рдбреЗрдЯрд╛ рдкрд░ рдирд░рдо рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред рдкрд╣рд▓реЗ рддреЗрдЬрд╝ рд░реАрдЯреНрд░рд╛рдИ рдХрд░реЗрдВ (рдЫреЛрдЯреЗ рд╕рд┐рдЧреНрдирд▓ рдбреНрд░рд╛рдкреНрд╕ рдХреЗ рд▓рд┐рдП), рдлрд┐рд░ рдзреАрд░реЗ-рдзреАрд░реЗ рдзреАрдорд╛ рдХрд░реЗрдВред рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреИрдХрдСрдлрд╝ рдЬреИрд╕реЗ 1 рдорд┐рдирдЯ, 5 рдорд┐рдирдЯ, 15 рдорд┐рдирдЯ, рдлрд┐рд░ рд╣рд░ рдШрдВрдЯреЗ рдЖрд╕рд╛рди рд╣реИред рд╕рд╛рде рд╣реА рдХреЗрд╡рд▓ рд╕рд╣реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рд░реАрдЯреНрд░рд╛рдИ рдХрд░реЗрдВ (рдПрдХ рдЕрдорд╛рдиреНрдп рдмрджрд▓рд╛рд╡ рдХреЛ рд╣рд░ рдмрд╛рд░ рд░реАрдЯреНрд░рд╛рдИ рди рдХрд░реЗрдВ)ред
рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рд╕рдВрднрд╛рд▓реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдЧрд▓рд╛ рдХрджрдо рдЕрд▓рдЧ рд╣реЛрдЧрд╛:
- Offline / no network: рдХреНрдпреВ рдореЗрдВ рд░рд╣реЗ, рдСрдирд▓рд╛рдЗрди рд╣реЛрдиреЗ рдкрд░ рд░реАрдЯреНрд░рд╛рдИ
- Timeout / server unavailable: рдлреЗрд▓ рдорд╛рд░реНрдХ рдХрд░реЗрдВ, рдмреИрдХрдСрдлрд╝ рдХреЗ рд╕рд╛рде рдСрдЯреЛ-рд░реАрдЯреНрд░рд╛рдИ
- Auth expired: рд╕рд┐рдВрдХ рдХреЛ рд░реЛрдХреЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреБрдирдГ рд╕рд╛рдЗрди-рдЗрди рдорд╛рдБрдЧреЗрдВ
- Validation failed (рдмреБрд░рд╛ рдЗрдирдкреБрдЯ): needs review, рджрд┐рдЦрд╛рдПрдБ рдХреНрдпрд╛ рдареАрдХ рдХрд░рдирд╛ рд╣реИ
- Conflict (рд░рд┐рдХреЙрд░реНрдб рдмрджрд▓ рдЧрдпрд╛): needs review, рдЕрдкрдиреЗ рдЯрдХрд░рд╛рд╡ рдирд┐рдпрдореЛрдВ рдкрд░ рд░реВрдЯ рдХрд░реЗрдВ
Idempotency рд╡рд╣ рдЪреАрдЬрд╝ рд╣реИ рдЬреЛ рд░реАрдЯреНрд░рд╛рдИ рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░рдЦрддреА рд╣реИред рд╣рд░ рдмрджрд▓рд╛рд╡ рдореЗрдВ рдПрдХ рдпреВрдирд┐рдХ рдПрдХреНрд╢рди ID (рдЕрдХреНрд╕рд░ UUID) рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рд╕реЗ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рднреЗрдЬрд╛ рдЬрд╛рдПред рдЕрдЧрд░ рдРрдк рд╡рд╣реА рдмрджрд▓рд╛рд╡ рдлрд┐рд░ рд╕реЗ рднреЗрдЬрддрд╛ рд╣реИ, рддреЛ рд╕рд░реНрд╡рд░ рдХреЛ рдЙрд╕ ID рдХреЛ рдкрд╣рдЪрд╛рдирдХрд░ рд╡рд╣реА рдкрд░рд┐рдгрд╛рдо рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдмрдЬрд╛рдп рдЗрд╕рдХреЗ рдХрд┐ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдмрди рдЬрд╛рдПрдБред
рдЙрджрд╛рд╣рд░рдг: рдПрдХ рддрдХрдиреАрд╢рд┐рдпрди рдСрдлрд╝рд▓рд╛рдЗрди рдПрдХ рдкреВрд░рд╛ рд╣реБрдЖ рдЬреЙрдм рд╕реЗрд╡ рдХрд░рддрд╛ рд╣реИ, рдлрд┐рд░ рд▓рд┐рдлреНрдЯ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрдк рдЕрдкрдбреЗрдЯ рднреЗрдЬрддрд╛ рд╣реИ, рдЯрд╛рдЗрдордЖрдЙрдЯ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдмрд╛рдж рдореЗрдВ рд░реАрдЯреНрд░рд╛рдИ рдХрд░рддрд╛ рд╣реИред рдПрдХреНрд╢рди ID рд╣реЛрдиреЗ рдкрд░ рджреВрд╕рд░рд╛ рднреЗрдЬрдирд╛ рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд╣реЛрдЧрд╛ред рдмрд┐рдирд╛ рдЗрд╕рдХреЗ рдЖрдк рдбреБрдкреНрд▓рд┐рдХреЗрдЯ "completed" рдЗрд╡реЗрдВрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред
AppMaster рдореЗрдВ рдЗрди рд╕реНрдЯреЗрдЯреНрд╕ рдФрд░ рдирд┐рдпрдореЛрдВ рдХреЛ рдЕрдкрдиреЗ рд╕рд┐рдВрдХ рдкреНрд░реЛрд╕реЗрд╕ рдореЗрдВ рдкрд╣рд▓рд╛ рджрд░реНрдЬрд╛ рдмрдирд╛рдПрдВ, рддрд╛рдХрд┐ рдЖрдкрдХреЗ Kotlin рдФрд░ SwiftUI рдРрдкреНрд╕ рд╣рд░ рдЬрдЧрд╣ рдПрдХ рдЬреИрд╕рд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░реЗрдВред
рдкреЗрдВрдбрд┐рдВрдЧ рдЪреЗрдВрдЬреЗрдЬ UX: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрдпрд╛ рджреЗрдЦрддрд╛ рд╣реИ рдФрд░ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ
рд▓реЛрдЧреЛрдВ рдХреЛ рдСрдлрд╝рд▓рд╛рдЗрди рдРрдк рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░рддреЗ рд╕рдордп рд╕реБрд░рдХреНрд╖рд┐рдд рдорд╣рд╕реВрд╕ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдЪреНрдЫрд╛ "pending changes" UX рд╢рд╛рдВрдд рдФрд░ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп рд╣реЛрддрд╛ рд╣реИ: рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд╛рдо рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕рд╣реЗрдЬрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдЕрдЧрд▓рд╛ рдХрджрдо рд╕реНрдкрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИред
рдПрдХ рд╕реВрдХреНрд╖реНрдо рд╕рдВрдХреЗрдд рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдмреИрдирд░ рд╕реЗ рдмреЗрд╣рддрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣реЗрдбрд░ рдореЗрдВ рдПрдХ рдЫреЛрдЯрд╛ "Syncing" рдЖрдЗрдХрди рджрд┐рдЦрд╛рдПрдБ, рдпрд╛ edits рд╡рд╛рд▓реЗ рд╕реНрдХреНрд░реАрди рдкрд░ рдПрдХ рд╢рд╛рдВрдд "3 pending" рд▓реЗрдмрд▓ред рдЕрд╕рд▓реА рдЦрддрд░реЗ рдХреЗ рд▓рд┐рдП рдбрд░рд╛рд╡рдиреЗ рд░рдВрдЧ рд░рдЦреЗрдВ (рдЬреИрд╕реЗ "рдЕрдкрд▓реЛрдб рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рд╕рд╛рдЗрди рдЖрдЙрдЯ рд╣реИрдВ")ред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдерд╛рди рджреЗрдВред рдПрдХ рд╕рд░рд▓ Outbox рдпрд╛ Pending changes рд╕реНрдХреНрд░реАрди рдЖрдЗрдЯрдореНрд╕ рдХреА рд╕реВрдЪреА рдХрд░ рд╕рдХрддреА рд╣реИ рдЬреИрд╕реЗ "Comment added to Ticket 104" рдпрд╛ "Profile photo updated." рдпрд╣ рдкрд╛рд░рджрд░реНрд╢рд┐рддрд╛ рдШрдмрд░рд╛рд╣рдЯ рд░реЛрдХрддреА рд╣реИ рдФрд░ рд╕рдкреЛрд░реНрдЯ рдЯрд┐рдХрдЯреНрд╕ рдШрдЯрд╛рддреА рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЛ рдХреБрдЫ рд╣реА рдХреНрд░рд┐рдпрд╛рдПрдБ рдЪрд╛рд╣рд┐рдП, рдФрд░ рд╡реЗ рдкреВрд░реЗ рдРрдк рдореЗрдВ рд╕реБрд╕рдВрдЧрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП:
- рдЕрднреА retry рдХрд░реЗрдВ
- рдлрд┐рд░ рд╕реЗ рдПрдбрд┐рдЯ рдХрд░реЗрдВ (рдирдпрд╛ рдмрджрд▓рд╛рд╡ рдмрдиреЗрдЧрд╛)
- рд▓реЛрдХрд▓ рдмрджрд▓рд╛рд╡ discard рдХрд░реЗрдВ
- рд╡рд┐рд╡рд░рдг рдХреЙрдкреА рдХрд░реЗрдВ (рдЗрд╢реНрдпреВ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧреА)
рд╕реНрдЯреЗрдЯ рд▓реЗрдмрд▓ рд╕рд░рд▓ рд░рдЦреЗрдВ: Pending, Syncing, Failedред рдЬрдм рдХреБрдЫ рдлреЗрд▓ рд╣реЛ, рддреЛ рдЗрд╕реЗ рдорд╛рдирд╡реАрдп рднрд╛рд╖рд╛ рдореЗрдВ рд╕рдордЭрд╛рдПрдБ: "Upload рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛ред рдЗрдВрдЯрд░рдиреЗрдЯ рдирд╣реАрдВ рд╣реИред" рдпрд╛ "рдЕрд╕реНрд╡реАрдХреГрдд: рдЗрд╕ рд░рд┐рдХреЙрд░реНрдб рдХреЛ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдмрджрд▓ рджрд┐рдпрд╛ред" рдПрд░рд░ рдХреЛрдбреНрд╕ рд╕реЗ рдмрдЪреЗрдВред
рдкреВрд░реЗ рдРрдк рдХреЛ рдмреНрд▓реЙрдХ рдордд рдХрд░реЗрдВ
рд╕рд┐рд░реНрдлрд╝ рдЙрдиреНрд╣реАрдВ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдмреНрд▓реЙрдХ рдХрд░реЗрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдСрдирд▓рд╛рдЗрди рд╣реЛрдирд╛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ, рдЬреИрд╕реЗ "Stripe рдХреЗ рд╕рд╛рде рдкреЗ рдХрд░реЗрдВ" рдпрд╛ "рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ invite рдХрд░реЗрдВред" рдмрд╛рдХреА рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬрд┐рд╕рдореЗрдВ рд╣рд╛рд▓ рдХрд╛ рдбреЗрдЯрд╛ рджреЗрдЦрдирд╛ рдФрд░ рдирдП рдбреНрд░рд╛рдлреНрдЯ рдмрдирд╛рдирд╛ рднреА рд╢рд╛рдорд┐рд▓ рд╣реИред
рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рд╡рд╛рд╣: рдПрдХ рдлрд╝реАрд▓реНрдб рдЯреЗрдХ рдмреЗрд╕рдореЗрдВрдЯ рдореЗрдВ рдПрдХ рдЬреЙрдм рд░рд┐рдкреЛрд░реНрдЯ рдПрдбрд┐рдЯ рдХрд░рддрд╛ рд╣реИред рдРрдк "1 pending" рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдЙрд╕реЗ рдХрд╛рдо рдЬрд╛рд░реА рд░рдЦрдиреЗ рджреЗрддрд╛ рд╣реИред рдмрд╛рдж рдореЗрдВ рдпрд╣ "Syncing" рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИ, рдлрд┐рд░ рдЕрдкрдиреЗ рдЖрдк рд╕рд╛рдлрд╝ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдлреЗрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЬреЙрдм рд░рд┐рдкреЛрд░реНрдЯ рдЙрдкрд▓рдмреНрдз рд░рд╣рддреА рд╣реИ, "Failed" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рдиреНрд╣рд┐рдд, рдФрд░ рдПрдХ рд╕рд┐рдВрдЧрд▓ "Retry now" рдмрдЯрди рд╣реЛрддрд╛ рд╣реИред
рдпрджрд┐ рдЖрдк AppMaster рдореЗрдВ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЗрди рд╕реНрдЯреЗрдЯреНрд╕ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдореЙрдбрд▓ рдХрд░реЗрдВ (pending, failed, synced) рддрд╛рдХрд┐ UI рд╣рд░ рдЬрдЧрд╣ рдмрд┐рдирд╛ рд╕реНрдкреЗрд╢рд▓-рдХреЗрд╕ рд╕реНрдХреНрд░реАрди рдХреЗ рдЗрдиреНрд╣реЗрдВ рджрд┐рдЦрд╛ рд╕рдХреЗред
рдСрде, рдкрд░рдорд┐рд╢рдиреНрд╕, рдФрд░ рдСрдлрд╝рд▓рд╛рдЗрди рдореЗрдВ рд╕реБрд░рдХреНрд╖рд╛
рдСрдлрд▓рд╛рдЗрди рдореЛрдб рдЖрдкрдХреЗ рд╕реБрд░рдХреНрд╖рд╛ рдореЙрдбрд▓ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд┐рдирд╛ рдХрдиреЗрдХреНрд╢рди рдХреЗ рдХреНрд░рд┐рдпрд╛рдПрдБ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдкрд░ рдЖрдкрдХрд╛ рд╕рд░реНрд╡рд░ рдлрд┐рд░ рднреА рд╕рддреНрдп рдХрд╛ рд╕реНрд░реЛрдд рд╣реИред рд╣рд░ рдХреНрдпреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдмрджрд▓рд╛рд╡ "рдЕрдиреБрд░реЛрдзрд┐рдд" рдорд╛рдирд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рди рдХрд┐ "рд╕реНрд╡реАрдХреГрдд"ред
рдСрдлрд╝рд▓рд╛рдЗрди рдХреЗ рджреМрд░рд╛рди рд▓реЙрдЧрд┐рди рдХреА рд╕рдордп-рд╕реАрдорд╛
рдЯреЛрдХрди рдХреА рдПрдХреНрд╕реНрдкрд╛рдпрд░реА рд╣реЛрддреА рд╣реИред рдЬрдм рдпрд╣ рдСрдлрд╝рд▓рд╛рдЗрди рд╣реЛрддреЗ рд╣реБрдП рдПрдХреНрд╕реНрдкрд╛рдпрд░ рд╣реЛ рдЬрд╛рдП, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдбрд┐рдЯреНрд╕ рдмрдирд╛рддреЗ рд░рд╣рдиреЗ рджреЗрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ pending рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред рдЙрди рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдЬреЛ рд╕рд░реНрд╡рд░ рдХрдиреНрдлрд░реНрдореЗрд╢рди рдЪрд╛рд╣рд┐рдП рд╡реЗ рдкреВрд░реА рдирд╣реАрдВ рдорд╛рдиреА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдЧрд▓реЗ рд╕рдлрд▓ рдСрде рд░рд┐рдлреНрд░реЗрд╢ рддрдХ рдЙрдиреНрд╣реЗрдВ pending рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦреЗрдВред
рдРрдк рдСрдирд▓рд╛рдЗрди рдЖрдиреЗ рдкрд░ рдкрд╣рд▓реЗ рд╕рд╛рдЗрд▓реЗрдВрдЯ рд░рд┐рдлреНрд░реЗрд╢ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВред рдЕрдЧрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдлрд┐рд░ рд╕рд╛рдЗрди-рдЗрди рдХрд░рдирд╛ рдкрдбрд╝реЗ, рддреЛ рдПрдХ рдмрд╛рд░ рдкреВрдЫреЗрдВ рдФрд░ рдлрд┐рд░ рд╕рд┐рдВрдХ рдЕрдкрдиреЗ рдЖрдк рдЬрд╛рд░реА рд░рдЦреЗрдВред
рд░рд┐-рд▓реЙрдЧрд┐рди рдХреЗ рдмрд╛рдж, рд╣рд░ рдХреНрдпреВ рдЖрдЗрдЯрдо рдХреЛ рднреЗрдЬрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд░реА-рд╡реИрдзреЗрдЯ рдХрд░реЗрдВред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рдЪрд╛рди рдмрджрд▓ рдЪреБрдХреА рд╣реЛ рд╕рдХрддреА рд╣реИ (рд╢реЗрдпрд░реНрдб рдбрд┐рд╡рд╛рдЗрд╕), рдФрд░ рдкреБрд░рд╛рдиреЗ рдПрдбрд┐рдЯреНрд╕ рдЧрд▓рдд рдЕрдХрд╛рдЙрдВрдЯ рдХреЗ рддрд╣рдд рд╕рд┐рдВрдХ рдирд╣реАрдВ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
рдкрд░рдорд┐рд╢рди рдмрджрд▓рд╛рд╡ рдФрд░ рдирд┐рд╖рд┐рджреНрдз рдХреНрд░рд┐рдпрд╛рдПрдБ
рдСрдирд▓рд╛рдЗрди рд░рд╣рддреЗ рд╣реБрдП рдкрд░рдорд┐рд╢рдиреНрд╕ рдмрджрд▓ рд╕рдХрддреА рд╣реИрдВред рд╡рд╣ рдПрдбрд┐рдЯ рдЬреЛ рдХрд▓ рдЕрдиреБрдорддрд┐ рдерд╛, рдЖрдЬ рдирд┐рд╖рд┐рджреНрдз рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣реИрдВрдбрд▓ рдХрд░реЗрдВ:
- рд╣рд░ рдХреНрдпреВ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдкрд░рдорд┐рд╢рди рдлрд┐рд░ рд╕реЗ рдЪреЗрдХ рдХрд░реЗрдВ
- рдЕрдЧрд░ рдирд┐рд╖рд┐рджреНрдз рд╣реИ, рддреЛ рдЙрд╕ рдЖрдЗрдЯрдо рдХреЛ рд░реЛрдХреЗрдВ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХрд╛рд░рдг рджрд┐рдЦрд╛рдПрдБ
- рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд▓реЛрдХрд▓ рдПрдбрд┐рдЯ рд░рдЦреЗрдВ рддрд╛рдХрд┐ рд╡реЗ рдЙрд╕реЗ рдХреЙрдкреА рдХрд░ рд╕рдХреЗрдВ рдпрд╛ рдПрдХреНрд╕реЗрд╕ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХреЗрдВ
- "Forbidden" рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдмрд╛рд░-рдмрд╛рд░ рд░реАрдЯреНрд░рд╛рдИ рд╕реЗ рдмрдЪреЗрдВ
рдЙрджрд╛рд╣рд░рдг: рдПрдХ рд╕рдкреЛрд░реНрдЯ рдПрдЬреЗрдВрдЯ рдлреНрд▓рд╛рдЗрдЯ рдореЗрдВ рдСрдлрд╝рд▓рд╛рдЗрди рдЧреНрд░рд╛рд╣рдХ рдиреЛрдЯ рдПрдбрд┐рдЯ рдХрд░рддрд╛ рд╣реИред рд░рд╛рддрднрд░ рдореЗрдВ рдЙрд╕рдХреА рднреВрдорд┐рдХрд╛ рд╣рдЯрд╛ рджреА рдЬрд╛рддреА рд╣реИред рдЬрдм рд╕рд┐рдВрдХ рдЪрд▓рддрд╛ рд╣реИ, рд╕рд░реНрд╡рд░ рдЕрдкрдбреЗрдЯ рдареБрдХрд░рд╛ рджреЗрддрд╛ рд╣реИред рдРрдк рджрд┐рдЦрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП: "Upload рдирд╣реАрдВ рд╣реЛ рд╕рдХрд╛: рдЖрдкрдХреЗ рдкрд╛рд╕ рдЕрдм рдПрдХреНрд╕реЗрд╕ рдирд╣реАрдВ рд╣реИ" рдФрд░ рдиреЛрдЯ рдХреЛ рд▓реЛрдХрд▓ рдбреНрд░рд╛рдлреНрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦреЗрдВред
рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХрд╛ рдСрдлрд╝рд▓рд╛рдЗрди рд╕реНрдЯреЛрд░реЗрдЬ
рд╕реНрдХреНрд░реАрдиреНрд╕ рд░реЗрдВрдбрд░ рдХрд░рдиреЗ рдФрд░ рдХреНрдпреВ рд░реАрдкреНрд▓реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреНрдпреВрдирддрдо рд╣реА рд╕реНрдЯреЛрд░ рдХрд░реЗрдВред рдСрдлрд╝рд▓рд╛рдЗрди рд╕реНрдЯреЛрд░реЗрдЬ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░реЗрдВ, рд╕реАрдХреНрд░реЗрдЯреНрд╕ рдХреИрд╢ рди рдХрд░реЗрдВ, рдФрд░ рд▓реЙрдЧрдЖрдЙрдЯ рдХреЗ рдирд┐рдпрдо рд╕реНрдкрд╖реНрдЯ рд░рдЦреЗрдВ (рдЙрджрд╛рд╣рд░рдг: рд▓реЛрдХрд▓ рдбреЗрдЯрд╛ рд╡рд╛рдЗрдк рдХрд░реЗрдВ, рдпрд╛ рдХреЗрд╡рд▓ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рд╕реНрдкрд╖реНрдЯ рд╕рд╣рдорддрд┐ рдкрд░ рдбреНрд░рд╛рдлреНрдЯ рд░рдЦреЗрдВ)ред AppMaster рд╕реЗ рдмрдирд╛рддреЗ рд╕рдордп рдЙрд╕рдХреЗ рдСрде рдореЙрдбреНрдпреВрд▓ рд╕реЗ рд╢реБрд░реБрдЖрдд рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреА рдХреНрдпреВ рдЗрд╕ рддрд░рд╣ рдбрд┐рдЬрд╛рдЗрди рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рд╡реИрдз рд╕реЗрд╢рди рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗ рдлрд┐рд░ рд╣реА рдЪреЗрдВрдЬ рднреЗрдЬреЗред
рд╕рд╛рдорд╛рдиреНрдп рдЬрд╛рд▓ рдЬрд┐рдирд╕реЗ рдХрд╛рдо рдЦреЛ рдЬрд╛рддрд╛ рд╣реИ рдпрд╛ рд░рд┐рдХреЙрд░реНрдб рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╣реЛрддреЗ рд╣реИрдВ
рдЕрдзрд┐рдХрд╛рдВрд╢ рдСрдлрд╝рд▓рд╛рдЗрди рдмрдЧреНрд╕ рдЬрдЯрд┐рд▓ рдирд╣реАрдВ рд╣реЛрддреЗред рд╡реЗ рдХреБрдЫ рдЫреЛрдЯреЗ рдлреИрд╕рд▓реЛрдВ рд╕реЗ рдЖрддреЗ рд╣реИрдВ рдЬреЛ рдкрд░рдлреЗрдХреНрдЯ рд╡рд╛рдИ-рдлрд╛рдИ рдкрд░ рдЯреЗрд╕реНрдЯ рдХрд░рддреЗ рд╕рдордп рд╣рд╛рдирд┐рд░рд╣рд┐рдд рд▓рдЧрддреЗ рд╣реИрдВ, рдкрд░ рдЕрд╕рд▓реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдЯреВрдЯ рдЬрд╛рддреЗ рд╣реИрдВред
рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдлрд▓рддрд╛ рд╣реИ рд╕рд╛рдЗрд▓реЗрдВрдЯ рдУрд╡рд░рд░рд╛рдЗрдЯреНрд╕ред рдЕрдЧрд░ рдРрдк рдкреБрд░рд╛рдиреЗ рд╡рд░реНрдЬрди рдХреЛ рдЕрдкрд▓реЛрдб рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╕рд░реНрд╡рд░ рдмрд┐рдирд╛ рдЬрд╛рдВрдЪреЗ рдЙрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓реЗрддрд╛ рд╣реИ, рддреЛ рдЖрдк рдХрд┐рд╕реА рдФрд░ рдХреЗ рдирдП рдПрдбрд┐рдЯ рдХреЛ рдорд┐рдЯрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдИ рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ рдЬрдм рддрдХ рдмрд╣реБрдд рджреЗрд░ рди рд╣реЛ рдЬрд╛рдПред рд╡рд░реНрдЬрди рдирдВрдмрд░ (рдпрд╛ "last updated" рд╕реНрдЯреИрдореНрдк) рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХ рдХрд░реЗрдВ рдФрд░ рдЬрдм рд╕рд░реНрд╡рд░ рдЖрдЧреЗ рдмрдврд╝ рдЪреБрдХрд╛ рд╣реЛ рддреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдЗрдВрдХрд╛рд░ рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд╡рд┐рдХрд▓реНрдк рдорд┐рд▓реЗред
рдПрдХ рдФрд░ рдЬрд╛рд▓ рд╣реИ retry stormред рдЬрдм рдлреЛрди рдХрдордЬреЛрд░ рдХрдиреЗрдХреНрд╢рди рдорд┐рд▓рдиреЗ рдкрд░ рдлрд┐рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдРрдк рд╣рд░ рдХреБрдЫ рд╕реЗрдХрдВрдб рдореЗрдВ рдмреИрдХрдПрдВрдб рдкрд░ рд╣рдорд▓рд╛ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмреИрдЯрд░реА рдЦрддреНрдо рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд░рд╛рдЗрдЯреНрд╕ рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред рд░реАрдЯреНрд░рд╛рдИ рд╢рд╛рдВрдд рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП: рд╣рд░ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдмрд╛рдж рдзреАрдореЗ рд╣реЛрдВ рдФрд░ рдереЛрдбрд╝рд╛ randomness рдЬреЛрдбрд╝реЗрдВ рддрд╛рдХрд┐ рд╣рдЬрд╛рд░реЛрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд░реАрдЯреНрд░рд╛рдИ рди рдХрд░реЗрдВред
рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЧрд▓рддрд┐рдпрд╛рдБ рдЬреЛ рдХрд╛рдо рдЦреЛрдиреЗ рдпрд╛ рдбреБрдкреНрд▓рд┐рдХреЗрдЯреНрд╕ рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИрдВ:
- рд╣рд░ рдлреЗрд▓реНрдпреЛрд░ рдХреЛ "рдиреЗрдЯрд╡рд░реНрдХ" рдЬреИрд╕рд╛ рдорд╛рдирдирд╛: рд╕реНрдерд╛рдпреА рддреНрд░реБрдЯрд┐рдпреЛрдВ (рдЕрдорд╛рдиреНрдп рдбреЗрдЯрд╛, рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ) рдХреЛ рдЕрд╕реНрдерд╛рдпреА (рдЯрд╛рдЗрдордЖрдЙрдЯ) рд╕реЗ рдЕрд▓рдЧ рдХрд░реЗрдВред
- рд╕рд┐рдВрдХ рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЛ рдЫрд┐рдкрд╛рдирд╛: рдЕрдЧрд░ рд▓реЛрдЧ рдирд╣реАрдВ рджреЗрдЦ рдкрд╛рддреЗ рдХреНрдпрд╛ рдлреЗрд▓ рд╣реБрдЖ, рддреЛ рд╡реЗ рдХрд╛рдо рдХреЛ рджреЛрд╣рд░рд╛рддреЗ рд╣реИрдВ рдФрд░ рджреЛ рд░рд┐рдХреЙрд░реНрдб рдмрди рдЬрд╛рддреЗ рд╣реИрдВред
- рдПрдХ рд╣реА рдмрджрд▓рд╛рд╡ рджреЛ рдмрд╛рд░ рднреЗрдЬрдирд╛ рдмрд┐рдирд╛ рд╕реБрд░рдХреНрд╖рд╛ рдХреЗ: рд╣рдореЗрд╢рд╛ рдПрдХ рдпреВрдирд┐рдХ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ ID рднреЗрдЬреЗрдВ рддрд╛рдХрд┐ рд╕рд░реНрд╡рд░ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдХреЛ рдкрд╣рдЪрд╛рди рд╕рдХреЗред
- рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рдСрдЯреЛ-рдорд╛рд░реНрдЬ рдХрд░рдирд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдХреЛ рдмрддрд╛рдП: рдЕрдЧрд░ рдЖрдк рдСрдЯреЛ-рдорд╛рд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рдгрд╛рдо рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рдореМрдХрд╛ рджреЗрдВ рдЬрдм рдпрд╣ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИред
- рдСрдлрд╝рд▓рд╛рдЗрди рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛рдирд╛ рдмрд┐рдирд╛ рд╕реНрдерд┐рд░ ID рдХреЗ: рдПрдХ рдЕрд╕реНрдерд╛рдпреА рд▓реЛрдХрд▓ ID рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ рдФрд░ рдЕрдкрд▓реЛрдб рдХреЗ рдмрд╛рдж рдЙрд╕реЗ рд╕рд░реНрд╡рд░ ID рд╕реЗ рдореИрдк рдХрд░реЗрдВ, рддрд╛рдХрд┐ рдмрд╛рдж рдХреЗ рдПрдбрд┐рдЯреНрд╕ рджреВрд╕рд░рд╛ рд░рд┐рдХреЙрд░реНрдб рди рдмрдирд╛ рджреЗрдВред
рдПрдХ рд╢реАрдШреНрд░ рдЙрджрд╛рд╣рд░рдг: рдПрдХ рдлрд╝реАрд▓реНрдб рдЯреЗрдХ рдПрдХ рдирдпрд╛ "Site Visit" рдСрдлрд╝рд▓рд╛рдЗрди рдмрдирд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЙрд╕реЗ рджреЛ рдмрд╛рд░ рдПрдбрд┐рдЯ рдХрд░рддрд╛ рд╣реИ рдлрд┐рд░ рдХрдиреЗрдХреНрдЯ рд╣реЛрддрд╛ рд╣реИред рдЕрдЧрд░ create рдХреЙрд▓ рд░реАрдЯреНрд░рд╛рдИ рдХрд░рддреЗ рд╣реБрдП рджреЛ рд╕рд░реНрд╡рд░ рд░рд┐рдХреЙрд░реНрдб рдмрдирд╛ рджреЗрддреА рд╣реИ, рддреЛ рдмрд╛рдж рдХреЗ рдПрдбрд┐рдЯреНрд╕ рдЧрд▓рдд рд░рд┐рдХреЙрд░реНрдб рд╕реЗ рдЬреБрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╕реНрдерд┐рд░ IDs рдФрд░ рд╕рд░реНрд╡рд░-рд╕рд╛рдЗрдб рдбреЗрдбреБрдкрд┐рдВрдЧ рдЗрд╕реЗ рд░реЛрдХрддреЗ рд╣реИрдВред
рдпрджрд┐ рдЖрдк AppMaster рдХреЗ рд╕рд╛рде рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдирд┐рдпрдо рд╡рд╣реА рд░рд╣рддреЗ рд╣реИрдВтАФрдлрд░реНрдХ рдХреЗрд╡рд▓ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрд╣рд╛рдБ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ: рдЕрдкрдиреЗ рд╕рд┐рдВрдХ рд▓реЙрдЬрд┐рдХ, рдбреЗрдЯрд╛ рдореЙрдбрд▓, рдФрд░ рдЙрди рд╕реНрдХреНрд░реАрди рдореЗрдВ рдЬреЛ "failed" рдмрдирд╛рдо "sent" рдЪреЗрдВрдЬ рджрд┐рдЦрд╛рддреА рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рджреГрд╢реНрдп: рджреЛ рд▓реЛрдЧ рдПрдХ рд╣реА рд░рд┐рдХреЙрд░реНрдб рдПрдбрд┐рдЯ рдХрд░рддреЗ рд╣реИрдВ
рдПрдХ рдлрд╝реАрд▓реНрдб рдЯреЗрдХреНрдиреАрд╢рд┐рдпрди, Maya, "Job #1842" рдЯрд┐рдХрдЯ рдХреЛ рдмреЗрд╕рдореЗрдВрдЯ рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░ рд░рд╣реА рд╣реИ рдмрд┐рдирд╛ рд╕рд┐рдЧреНрдирд▓ рдХреЗред рд╡рд╣ рд╕реНрдЯреЗрдЯрд╕ рдХреЛ "In progress" рд╕реЗ "Completed" рдХрд░ рджреЗрддреА рд╣реИ рдФрд░ рдиреЛрдЯ рдЬреЛрдбрд╝рддреА рд╣реИ: "Replaced valve, tested OK." рдРрдк рддреБрд░рдВрдд рд╕реЗрд╡ рдХрд░ рджреЗрддрд╛ рд╣реИ рдФрд░ рдЗрд╕реЗ pending рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдКрдкрд░, рдЙрд╕рдХреА рдЯреАрдордореЗрдЯ Leo рдСрдирд▓рд╛рдЗрди рд╣реИ рдФрд░ рдЙрд╕реА рд╕рдордп рд╡рд╣реА рдЬреЙрдм рдПрдбрд┐рдЯ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд╣ рд╢реЗрдбреНрдпреВрд▓ рд╕рдордп рдмрджрд▓рддрд╛ рд╣реИ рдФрд░ рдЬреЙрдм рдПрдХ рджреВрд╕рд░реЗ рдЯреЗрдХреНрдиреАрд╢рд┐рдпрди рдХреЛ рдЕрд╕рд╛рдЗрди рдХрд░ рджреЗрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЧреНрд░рд╛рд╣рдХ рдиреЗ рдЕрдкрдбреЗрдЯ рджрд┐рдпрд╛ред
рдЬрдм Maya рд╕рд┐рдЧреНрдирд▓ рдкрд╛рддреА рд╣реИ, рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рд╕рд┐рдВрдХ рдЪреБрдкрдЪрд╛рдк рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдПрдХ рдкреВрд░реНрд╡рд╛рдиреБрдореЗрдп, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рдорд┐рддреНрд░ рдкреНрд░рд╡рд╛рд╣ рдореЗрдВ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ:
- Maya рдХрд╛ рдмрджрд▓рд╛рд╡ рдЕрднреА рднреА рд╕рд┐рдВрдХ рдХреНрдпреВ рдореЗрдВ рд╣реИ (job ID, рдмрджрд▓реЗ рдЧрдП рдлрд╝реАрд▓реНрдб, рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк, рдФрд░ рд░рд┐рдХреЙрд░реНрдб рдХрд╛ рд╡рд░реНрдЬрди рдЬреЛ рдЙрд╕рдиреЗ рдЖрдЦрд╝рд┐рд░реА рдмрд╛рд░ рджреЗрдЦрд╛ рдерд╛)ред
- рдРрдк рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдЬрд╡рд╛рдм рджреЗрддрд╛ рд╣реИ: "рдпрд╣ рдЬреЙрдм рдЖрдкрдХреЗ рд╡рд░реНрдЬрди рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ" (рдПрдХ рдЯрдХрд░рд╛рд╡)ред
- рдЖрдкрдХрд╛ рдЯрдХрд░рд╛рд╡ рдирд┐рдпрдо рдЪрд▓рддрд╛ рд╣реИ: рд╕реНрдЯреЗрдЯрд╕ рдФрд░ рдиреЛрдЯреНрд╕ рдорд░реНрдЬ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд░ рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рд╕рд░реНрд╡рд░ рдкрд░ рдмрд╛рдж рдореЗрдВ рдХрд┐рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рдХреЛ рдЬреАрддрдиреЗ рджреЗрдВред
- рд╕рд░реНрд╡рд░ рдПрдХ рдорд░реНрдЬреНрдб рдкрд░рд┐рдгрд╛рдо рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ: status = "Completed" (Maya рд╕реЗ), рдиреЛрдЯ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ (Maya рд╕реЗ), assigned technician = Leo рдХрд╛ рд╡рд┐рдХрд▓реНрдк (Leo рд╕реЗ)ред
- Maya рдХреЗ рдРрдк рдореЗрдВ рдЬреЙрдм рдлрд┐рд░ рдЦреБрд▓рддрд╛ рд╣реИ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдмреИрдирд░ рдХреЗ рд╕рд╛рде: "Synced with updates. Assignment changed while you were offline." рдПрдХ рдЫреЛрдЯрд╛ "Review" рдПрдХреНрд╢рди рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдмрджрд▓рд╛ред
рдЕрдм рдПрдХ рдлрд╝реЗрд▓реНрдпреЛрд░ рдЬреЛрдбрд╝реЗрдВ: Maya рдХрд╛ рд▓реЙрдЧрд┐рди рдЯреЛрдХрди рдСрдлрд╝рд▓рд╛рдЗрди рд░рд╣рддреЗ рд╣реБрдП рдПрдХреНрд╕реНрдкрд╛рдпрд░ рд╣реЛ рдЧрдпрд╛ред рдкрд╣рд▓реА рд╕рд┐рдВрдХ рдХреЛрд╢рд┐рд╢ "Sign in required" рд╕реЗ рдлреЗрд▓ рд╣реЛрддреА рд╣реИред рдРрдк рдЙрд╕рдХреЗ рдПрдбрд┐рдЯреНрд╕ рдХреЛ рд░рдЦрддрд╛ рд╣реИ, рдЙрдиреНрд╣реЗрдВ "Paused" рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рд░реНрдХ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдПрдХ рд╕рд┐рдВрдЧрд▓ рд╕рд░рд▓ рдкреНрд░реЙрдореНрдкреНрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдЬрдм рд╡рд╣ рд╕рд╛рдЗрди рдЗрди рдХрд░рддреА рд╣реИ, рддреЛ рд╕рд┐рдВрдХ рдмрд┐рдирд╛ рдХреБрдЫ рдлрд┐рд░ рд╕реЗ рдЯрд╛рдЗрдк рдХрд░рд╛рдП рдЕрдкрдиреЗ рдЖрдк рджреЛрдмрд╛рд░рд╛ рд╢реБрд░реВ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрджрд┐ рд╡рд╣рд╛рдБ рдХреЛрдИ рд╡реИрд▓рд┐рдбреЗрд╢рди рд╕рдорд╕реНрдпрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг: "Completed" рдХреЗ рд▓рд┐рдП рдлреЛрдЯреЛ рдЕрдирд┐рд╡рд╛рд░реНрдп рд╣реИ), рддреЛ рдРрдк рдЕрдиреБрдорд╛рди рди рд▓рдЧрд╛рдПред рд╡рд╣ рдЖрдЗрдЯрдо рдХреЛ "Needs attention" рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗ, рдареАрдХ рд╡рд╣реА рдмрддрд╛рдП рдЬреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдлрд┐рд░ рд╕реЗ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рджреЗред
AppMaster рдЬреИрд╕реЗ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдпрд╣рд╛рдБ рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХреНрдпреВ, рдЯрдХрд░рд╛рд╡ рдирд┐рдпрдо, рдФрд░ pending-state UX рдХреЛ рд╡рд┐рдЬрд╝реБрдЕрд▓реА рдбрд┐рдЬрд╛рдЗрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрдмрдХрд┐ рдЕрд╕рд▓реА рдиреЗрдЯрд┐рд╡ Kotlin рдФрд░ SwiftUI рдРрдкреНрд╕ рднреЗрдЬрддреЗ рд╣реИрдВред
рддреНрд╡рд░рд┐рдд рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рдФрд░ рдЖрдЧреЗ рдХреЗ рдХрджрдо
рдСрдлрд╝рд▓рд╛рдЗрди рд╕рд┐рдВрдХ рдХреЛ рдПрдХ end-to-end рдлреАрдЪрд░ рдорд╛рдиреЗрдВ рдЬрд┐рд╕реЗ рдЖрдк рдЯреЗрд╕реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рди рдХрд┐ рдлрд┐рдХреНрд╕реЗрд╕ рдХрд╛ рдПрдХ рдвреЗрд░ред рд▓рдХреНрд╖реНрдп рд╕рд░рд▓ рд╣реИ: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрднреА рдпрд╣ рди рд╕реЛрдЪреЗрдВ рдХрд┐ рдЙрдирдХрд╛ рдХрд╛рдо рд╕реЗрд╡ рд╣реБрдЖ рдпрд╛ рдирд╣реАрдВ, рдФрд░ рдРрдк рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рди рдмрдирд╛рдПред
рдПрдХ рдЫреЛрдЯреА рдЪреЗрдХрд▓рд┐рд╕реНрдЯ рддрд╛рдХрд┐ рдиреАрдВрд╡ рдареЛрд╕ рд╣реЛ:
- рд╕рд┐рдВрдХ рдХреНрдпреВ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕реНрдЯреЛрд░ рд╣реЛ, рдФрд░ рд╣рд░ рдмрджрд▓рд╛рд╡ рдХрд╛ рдПрдХ рд╕реНрдерд┐рд░ рд▓реЛрдХрд▓ ID рд╣реЛ рд╕рд╛рде рдореЗрдВ рд╕рд░реНрд╡рд░ ID рдЬрдм рдЙрдкрд▓рдмреНрдз рд╣реЛред
- рд╕реНрдкрд╖реНрдЯ рд╕реНрдЯреЗрдЯреНрд╕ рдореМрдЬреВрдж рд╣реЛрдВ (queued, syncing, sent, failed, needs review) рдФрд░ рд╕реБрд╕рдВрдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕реНрддреЗрдорд╛рд▓ рд╣реЛрдВред
- рд░рд┐рдХреНрд╡реЗрд╕реНрдЯреНрд╕ idempotent рд╣реЛрдВ (рд░реАрдЯреНрд░рд╛рдИ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд), рдФрд░ рд╣рд░ рдСрдкрд░реЗрд╢рди рдореЗрдВ idempotency key рд╣реЛред
- рд░рд┐рдХреЙрд░реНрдбреНрд╕ рдореЗрдВ рд╡рд░реНрдЬрдирд┐рдВрдЧ рд╣реЛ (updatedAt, revision number, рдпрд╛ ETag) рддрд╛рдХрд┐ рдЯрдХрд░рд╛рд╡ рдкрддрд╛ рдЪрд▓ рд╕рдХреЗред
- рдЯрдХрд░рд╛рд╡ рдирд┐рдпрдо рд╕рд░рд▓ рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рд╣реЛрдВ (рдХреНрдпрд╛ рдЬреАрддрддрд╛ рд╣реИ, рдХреНрдпрд╛ рдорд░реНрдЬ рд╣реЛрддрд╛ рд╣реИ, рдХрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдкреВрдЫрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдПрдХ рдмрд╛рд░ рдпреЗ рдЬрдЧрд╣ рдкрд░ рд╣реЛрдВ, рдЕрдиреБрднрд╡ рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдореЙрдбрд▓ рдЬрд┐рддрдирд╛ рдордЬрдмреВрдд рд╣реИ рдЙрддрдирд╛ рд╣реА рдордЬрдмреВрдд рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдпрд╣ рджреЗрдЦ рд╕рдХреЗрдВ рдХрд┐ рдХреНрдпрд╛ pending рд╣реИ, рдХреНрдпрд╛ рдлреЗрд▓ рд╣реБрдЖ, рдФрд░ рдмрд┐рдирд╛ рдХрд╛рдо рдЦреЛрдП рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЬреАрд╡рди рд╕реЗ рдорд┐рд▓рддреЗ-рдЬреБрд▓рддреЗ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рд╕реЗ рдЯреЗрд╕реНрдЯ рдХрд░реЗрдВ:
- рдПрдпрд░рдкреНрд▓реЗрди рдореЛрдб рдПрдбрд┐рдЯреНрд╕: рдмрдирд╛рдПрдВ, рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ, рдбрд┐рд▓реАрдЯ рдХрд░реЗрдВ, рдлрд┐рд░ рд░реАрдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВред
- рдлреНрд▓реИрдХрд╝реА рдиреЗрдЯрд╡рд░реНрдХ: рд╕рд┐рдВрдХ рдХреЗ рдмреАрдЪ рдХрдиреЗрдХреНрд╢рди рдбреНрд░реЙрдк рдХрд░реЗрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд░реАрдЯреНрд░рд╛рдИ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рди рдмрдирд╛рдПрдВред
- рдРрдк рдмрдВрдж рд╣реЛ рдЧрдпрд╛: рднреЗрдЬрддреЗ рд╕рдордп рдлреНрд░реЛрд░реНрд╕ рдХреНрд▓реЛрдЬрд╝ рдХрд░реЗрдВ, рдлрд┐рд░ рдЦреЛрд▓реЗрдВ рдФрд░ рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдХреНрдпреВ рд░рд┐рдХрд╡рд░ рдХрд░ рд░рд╣рд╛ рд╣реИред
- рдХреНрд▓реЙрдХ рд╕реНрдХреНрдпреВ: рдбрд┐рд╡рд╛рдЗрд╕ рд╕рдордп рдЧрд▓рдд рд╣реЛ, рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдЯрдХрд░рд╛рд╡ рдбрд┐рдЯреЗрдХреНрд╢рди рдЕрднреА рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
- рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЯреИрдк: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ Save рджреЛ рдмрд╛рд░ рджрдмрд╛рддрд╛ рд╣реИ, рдкреБрд╖реНрдЯрд┐ рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░рд┐рд╡рд░реНрддрди рдмрдирддрд╛ рд╣реИред
UI рдкреЛрд▓рд┐рд╢ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкреВрд░реЗ рдлреНрд▓реЛ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдПрдВред рдПрдХ рд╕реНрдХреНрд░реАрди, рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдЯрд╛рдЗрдк, рдФрд░ рдПрдХ рдЯрдХрд░рд╛рд╡ рдХреЗрд╕ (рдПрдХ рд╣реА рдлрд╝реАрд▓реНрдб рдкрд░ рджреЛ рдПрдбрд┐рдЯ) рдмрдирд╛рдХрд░ рд╢реБрд░реВ рдХрд░реЗрдВред рдПрдХ рд╕рд░рд▓ рд╕рд┐рдВрдХ рд╕реНрдЯреЗрдЯ рдПрд░рд┐рдпрд╛, рд╡рд┐рдлрд▓рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП Retry рдмрдЯрди, рдФрд░ рдПрдХ рд╕реНрдкрд╖реНрдЯ рдЯрдХрд░рд╛рд╡ рд╕реНрдХреНрд░реАрди рдЬреЛрдбрд╝реЗрдВред рдЬрдм рд╡рд╣ рдХрд╛рдо рдХрд░реЗ, рддреЛ рдФрд░ рд╕реНрдХреНрд░реАрди рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рджреЛрд╣рд░рд╛рдПрдБред
рдЕрдЧрд░ рдЖрдк рдмрд┐рдирд╛ рдХреЛрдбрд┐рдВрдЧ рдХреЗ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, AppMaster (appmaster.io) рдПрдХ рд╣реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдиреЗрдЯрд┐рд╡ Kotlin рдФрд░ SwiftUI рдРрдкреНрд╕ рдХреЗ рд╕рд╛рде рдмреИрдХрдПрдВрдб рдЬрдирд░реЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдЖрдк рдХреНрдпреВ, рд╡рд░реНрдЬрди рдЪреЗрдХ, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╕рдордХреНрд╖ рдЕрд╡рд╕реНрдерд╛рдУрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░ рд╕рдХреЗрдВ рдмрдЬрд╛рдп рд╕рдм рдХреБрдЫ рд╣рд╛рде рд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗред


