Π‘Π΅ΡΠ²ΠΈΡ Π΄Π»Ρ ΠΈΠ³ΡΡ Π² ΠΊΡΠ΅ΡΡΠΈΠΊΠΈ Π½ΠΎΠ»ΠΈΠΊΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ Π½Π° ASP.NET Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Entity Framework.
Π‘Π΅ΡΠ²ΠΈΡ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ API Π΄Π»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΈΠ³ΡΡ Π² ΠΊΡΠ΅ΡΡΠΈΠΊΠΈ-Π½ΠΎΠ»ΠΈΠΊΠΈ. ΠΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ HTTP Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°ΡΡ ΠΈΠ³ΡΠΎΠ²ΠΎΠ΅ Π»ΠΎΠ±Π±ΠΈ Ρ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ ID ΠΈΠ³ΡΠΎΠΊΠΎΠ², Π° Π·Π°ΡΠ΅ΠΌ Π΄Π΅Π»Π°ΡΡ Ρ ΠΎΠ΄Ρ Π½Π° ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΌ 3x3 ΠΏΠΎΠ»Π΅.
ΠΠ»Ρ ΠΎΡΡΠ»Π΅ΠΆΠΈΠ²Π°Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΉ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΠΊΠ»Π΅ΡΠΎΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΠ SQLite, Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΡΠ΅ΡΠ΅Π· Entity Framework
ΠΠ±ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈΡ | |
---|---|
X | ΠΠ»Ρ ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ° |
O | ΠΠ»Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ° |
ΠΠΎΠ»Π΅ | 3Ρ 3 |
ΠΠ»Π΅ΡΠΊΠΈ | ΠΎΡ 0 Π΄ΠΎ 8 |
Π£ΡΠ»ΠΎΠ²ΠΈΡ ΠΏΠΎΠ±Π΅Π΄Ρ Π½Π΅ ΠΎΡΠ»ΠΈΡΠ°ΡΡΡΡ
ΠΠΎΠ»Π΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΠΈΠ· ΡΠ΅Π±Ρ 3Ρ 3 ΠΌΠ°ΡΡΠΈΡΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ ΡΠ°Π²Π½Ρ:
0 1 2
3 4 5
6 7 8
ΠΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠ°ΠΊΠΈΠ΅ HTTP Π·Π°ΠΏΡΠΎΡΡ ΠΊΠ°ΠΊ:
- HTTP POST - Π½Π°ΡΠ°ΡΡ Π½ΠΎΠ²ΡΡ ΠΈΠ³ΡΡ. ΠΠ³ΡΠ° ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Ρ ΠΏΡΡΡΡΠΌ ΠΏΠΎΠ»Π΅ΠΌ Field, Π½ΡΠΆΠ½ΠΎ Π»ΠΈΡΡ Π·Π°Π΄Π°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ id ΠΈΠ³ΡΠΎΠΊΠΎΠ², ΡΡΠΎΠ±Ρ ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π΄Π΅Π»Π°ΡΡ Π²ΡΠ±ΠΎΡΠΊΡ ΠΏΠΎ ΠΈΠ³ΡΠΎΠΊΡ ΠΈ ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΠ³Ρ ΠΎΠ½ ΡΡΠ³ΡΠ°Π» (Π΄Π»Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ).
curl -X 'POST' \
'https://localhost:7138/api/Sessions/api/StartGame?player1Id=1341511&player2Id=5122242' \
- HTTP PATCH - ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΎΠ΄ Π² Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΌ ΠΏΠΎΠ»Π΅. ΠΡΠ»ΠΈ ΡΠ΅ΠΉΡΠ°Ρ Π½Π° ΠΏΠΎΠ»Π΅ Ρ ΠΎΠ΄ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΠΈΠ³ΡΠΎΠΊΠ°, ΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π½Π° Π²ΡΠ±ΡΠ°Π½Π½ΠΎΠΉ ΠΊΠ»Π΅ΡΠΊΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΈΡΡ Π·Π½Π°ΠΊ X ΠΈΠ»ΠΈ O Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ id ΠΈΠ³ΡΠΎΠΊΠ° Π² ΡΡΠΎΠΉ ΠΈΠ³ΡΠ΅.
curl -X 'PATCH' \
'https://localhost:7138/api/Sessions/api/MakeMove?_SessionId=2&_PlayerId=1341511&_Cell=2' \
- HTTP GET - ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΏΠΎΠ»Ρ, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΠΎΠΉ ΠΈΠ³ΡΠ΅. ΠΠ»Ρ ΡΠΎΠ³ΠΎ, ΡΡΠΎΠ±Ρ ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΈΠ³ΡΡ Π½Π° ΡΠ΅Π»Π΅ΡΠΎΠ½Π΅ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΡΡΠ΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠΉ http Π·Π°ΠΏΡΠΎΡ. Π ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ ΠΎΠ΄Π° ΡΠΎΠΏΠ΅ΡΠ½ΠΈΠΊΠ° ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Ρ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠ»ΡΡΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΏΠΎΠ»Ρ, ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡ Π½Π° ΡΡΠΎΠΌ ΠΎΡΡΠΈΡΠΎΠ²ΡΠ²Π°ΡΡ UI Π·Π½Π°ΡΠ΅Π½ΠΈΡ.
curl -X 'GET' \
'https://localhost:7138/api/Sessions?_SessionId=2' \
ISSUES: Π½Π° Π΄Π°Π½Π½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Ρ ΠΌΠ΅Π½Ρ Π½Π΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΠΎΠΏΠΈΡΠ°ΡΡ Π² DI Π½ΠΎΠ²ΡΠΉ DBcontext, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ FieldHandler, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΡΡΡ Π΅Π³ΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π° Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ Π² [NotMapped] ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ°, Π° ΠΏΡΠΈΡΠ²Π°Π²Π°Π½ΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π²ΡΡΡΠ½ΡΡ.
TEMP:
- ΠΠ΅ΡΠ΅Π΄ Π΄Π΅ΠΏΠ»ΠΎΠ΅ΠΌ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠ±ΡΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Ensure Deleted, ΠΎΠ½Π° ΡΠ΄Π°Π»ΡΠ΅Ρ ΠΠ ΠΈ ΡΠΎΠ·Π΄Π°Π΅Ρ Π·Π°Π½ΠΎΠ³ΠΎ ΠΈΡΠΊΠ»ΡΡΠ΅ΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
- ΠΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΡΡΠΎΠΊΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΠ, ΠΏΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ ΠΏΠΎΠΌΠ΅ΡΡΠΈΡΡ Π΅Π΅ Π² ΡΠ°ΠΉΠ» Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠ°.
TODO:
- UI ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ (Desktop)
- Refactor ΠΌΠ°ΠΏΠΏΠΈΠ½Π³Π° ΠΊΠ»Π΅ΡΠΎΠΊ
- AUTO Move
- Unit tests