ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡ Π΄Π»Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ Π±Π°Π½ΠΊΠ° Β«Π‘ΡΠ°ΡΒ».
ΠΠ°Π½Π½ΡΠΉ ΡΠ΅ΡΠ²ΠΈΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΊΡΡΡΠΎΠ²ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ. Π‘Π΅ΡΠ²ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΈΡ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ². Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎΠ΄Π±ΠΈΡΠ°ΡΡΡΡ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°, ΠΏΠΎΡΠ»Π΅ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΠΉ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ².
ΠΡ β Π±Π°Π½ΠΊ Β«Π‘ΡΠ°ΡΒ». ΠΠ°ΡΠ° ΡΠ΅Π»Ρ β Π²Π½Π΅Π΄ΡΠΈΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠ΅Π»ΡΠ½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ ΠΌΠ°ΡΠΊΠ΅ΡΠΈΠ½Π³Π° ΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΡΠΎΡΡΡΠ΄Π½ΠΈΠΊΠ°ΠΌ Π² ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΡΠ»ΡΠ³ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ.
ΠΠ°Π΄Π°ΡΠ° β ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ΅ΡΠ²ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄Π΅Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΠΎΠ²Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ°ΠΌ Π½ΠΎΠ²ΡΠ΅ Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠ°Π²ΠΈΠ» ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ.
Π‘Π΅ΡΠ²ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΡΠΆΠ΅ Π½Π°ΠΏΠΎΠ»Π½Π΅Π½Π½ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . Π ΡΠ΅Π°Π»ΡΠ½ΡΡ ΡΡΠ»ΠΎΠ²ΠΈΡΡ ΡΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π½Π°Ρ ΠΎΠ΄ΠΈΡΡΡ Π² ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ, Π½ΠΎ Π΄Π»Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠ° ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠ°Ρ ΡΠ°ΠΉΠ»ΠΎΠ²Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ H2.
- ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ Π±Π°Π½ΠΊΠ°.
- ΠΡΠΎΠ΄ΡΠΊΡΡ Π±Π°Π½ΠΊΠ°.
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ ΠΏΠΎ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°ΠΌ Π±Π°Π½ΠΊΠ°.
ΠΡΠΈ ΡΡΡΠ½ΠΎΡΡΠΈ Π½Π΅ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π°ΠΏΡΡΠΌΡΡ (Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ JPA ΠΈ Entity). ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ JDBC
ΠΈ JdbcTemplate
.
ΠΠ°ΠΏΠΎΠ»Π½Π΅Π½Π½Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ
ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ ΠΈ ΡΠΆΠ΅ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ Π΄Π»Ρ Π²ΡΠ΄Π°ΡΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ. Π€Π°ΠΉΠ» Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
: transaction.mv.db
.
ΠΠ»Ρ ΠΏΡΠΎΡΠΌΠΎΡΡΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ DBeaver:
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ H2.
- Π£ΠΊΠ°ΠΆΠΈΡΠ΅ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
ΠΠ°ΠΆΠ½ΠΎ: ΠΠ°Π·Π° Π΄Π°Π½Π½ΡΡ Π΄ΠΎΡΡΡΠΏΠ½Π° ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π½ΠΈΡ.
ΠΠΎΠΌΠΈΠΌΠΎ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΊ ΠΏΡΠΎΠ΅ΠΊΡΡ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΡΡΡΠ½ΠΎΡΡΠ΅ΠΉ ΠΈ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌΠΈ Π±ΡΠ»Π° ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½Π° Π²ΡΠΎΡΠ°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ JPA ΠΈ Entity
ΠΡΠΎΠ΄ΡΠΊΡΡ Π΄Π»Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ Π²ΠΊΠ»ΡΡΠ°ΡΡ:
- ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΈ ΡΠΈΠΏ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°.
- Π’Π΅ΠΊΡΡΠΎΠ²ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°.
- ΠΠ°Π±ΠΎΡ ΠΏΡΠ°Π²ΠΈΠ», ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΎΠ΄ΡΠΊΡ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ Π² ΡΠΏΠΈΡΠΎΠΊ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΎΠ±ΠΎΠΉ ΠΌΠ°ΡΡΠΈΠ² ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² Π·Π°ΠΏΡΠΎΡΠΎΠ². ΠΠ°ΠΆΠ΄ΡΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ Π·Π°ΠΏΡΠΎΡΠ° ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌΠΈ ΠΏΠΎΠ»ΡΠΌΠΈ:
query
β ΡΠΈΠΏ Π·Π°ΠΏΡΠΎΡΠ°.arguments
β Π°ΡΠ³ΡΠΌΠ΅Π½ΡΡ Π·Π°ΠΏΡΠΎΡΠ°.negate
β ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΎΡΡΠΈΡΠ°Π½ΠΈΡ.
{
"query": "USER_OF",
"arguments": [
"CREDIT"
],
"negate": true
}
ΠΡΠΎΡ Π·Π°ΠΏΡΠΎΡ ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΡΠΈΠΏΠ° CREDIT. ΠΡΠ»ΠΈ negate ΡΠ°Π²Π½ΠΎ true, ΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°.
USER_OF
β ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΡΠ²Π»ΡΠ΅ΡΡΡ Π»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°.
ΠΡΠ³ΡΠΌΠ΅Π½ΡΡ:
ΡΠΈΠΏ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° (DEBIT, CREDIT, INVEST, SAVING).
{
"productName": "Invest 500",
"productId": "147f6a0f-3b91-413b-ab99-87f081d60d5a",
"productText": "ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ Invest 500",
"rule": [
{
"query": "USER_OF",
"arguments": [
"DEBIT"
],
"negate": true
},
{
"query": "USER_OF",
"arguments": [
"INVEST"
],
"negate": false
},
{
"query": "TRANSACTION_SUM_COMPARE",
"arguments": [
"SAVING",
"DEPOSIT",
">",
"1000"
],
"negate": true
}
]
}
- Java 17 β ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ·ΡΠΊ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
- Spring Boot β ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΌΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡΠΎΠ².
- Spring Data JPA β Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ .
- Spring JDBC β Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ SQL-Π·Π°ΠΏΡΠΎΡΠΎΠ².
- H2 Database β Π²ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΠ°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.
- PostgreSQL β ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ Π±Π°Π·Π° Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Ρ ΡΠ°Π½Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ .
- Liquibase β Π΄Π»Ρ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΠΌΠΈ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ .
- Caffeine β ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ .
- Telegram Bot API β Π΄Π»Ρ ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ Ρ Telegram.
- Swagger (OpenAPI 3.0) β Π΄Π»Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ API.
- Lombok β Π΄Π»Ρ ΡΠΎΠΊΡΠ°ΡΠ΅Π½ΠΈΡ boilerplate-ΠΊΠΎΠ΄Π°.
- Apache Commons Collections β Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌΠΈ.
- Apache Commons Lang β Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠΈΠ»ΠΈΡΠ°ΠΌΠΈ.
- Emoji-Java β Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΌΠΎΠ΄Π·ΠΈ Π² Telegram.
- Spring Boot Actuator β Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ.
- Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΡΠΎΠ΄ΡΠΊΡΠΎΠ²:
- Π€ΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΡΠ΅Π΄ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΡΠ°Π²ΠΈΠ».
- ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ².
- ΠΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π΄Π»Ρ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌΠΈ:
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅, ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ.
- ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ.
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Telegram:
- ΠΡΠΏΡΠ°Π²ΠΊΠ° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΡΠ΅ΡΠ΅Π· Telegram-Π±ΠΎΡΠ°.
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΊΠΎΠΌΠ°Π½Π΄ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, /recommend).
- ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ API:
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Swagger.
- Π£ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΡΡΠ΅ΠΌ:
- Π‘Π±ΡΠΎΡ ΠΊΡΡΠ° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ ΡΠ΅ΡΠ΅Π· API.
- ΠΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³:
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Spring Boot Actuator Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ.
ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠΎ ΡΠΎΠ·Π΄Π°Π½ Telegram-Π±ΠΎΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ΄Π°Π΅Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ ΠΏΠΎ ΠΈΡ username.
- ΠΡΠΈΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ ΠΈ ΡΠΏΡΠ°Π²ΠΊΠ°:
- ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ Π±ΠΎΡ ΠΏΡΠΈΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΡ ΡΠΏΡΠ°Π²ΠΊΡ Ρ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΌΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΠΌΠΈ.
- ΠΠΎΠΌΠ°Π½Π΄Π°
/recommend username
:- ΠΠΎΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
/recommend
Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ (username). - ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π°ΠΉΠ΄Π΅Π½, Π±ΠΎΡ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π² ΡΠΎΡΠΌΠ°ΡΠ΅:
ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉΡΠ΅, <ΠΠΌΡ ΠΈ ΡΠ°ΠΌΠΈΠ»ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ>! ΠΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ Π΄Π»Ρ Π²Π°Ρ: - <ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°>: <ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°> - <ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°>: <ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ°>
- ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ ΠΈΠ»ΠΈ Π½Π°ΠΉΠ΄Π΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π±ΠΎΡ Π²ΡΠ΄Π°Π΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅: Β«ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½Β».
- ΠΠΎΡ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
- ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Ρ:
/recommend luke.skywalker
- ΠΠΎΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ:
ΠΠ΄ΡΠ°Π²ΡΡΠ²ΡΠΉΡΠ΅, Luke Skywalker!
ΠΠΎΠ²ΡΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΡ Π΄Π»Ρ Π²Π°Ρ:
- ΠΡΠ΅Π΄ΠΈΡΠ½Π°Ρ ΠΊΠ°ΡΡΠ°: Π£Π΄ΠΎΠ±Π½Π°Ρ ΠΊΡΠ΅Π΄ΠΈΡΠ½Π°Ρ ΠΊΠ°ΡΡΠ° Ρ ΠΊΡΡΠ±ΡΠΊΠΎΠΌ Π΄ΠΎ 10%.
- ΠΠ½Π²Π΅ΡΡΠΈΡΠΈΠΎΠ½Π½ΡΠΉ ΡΡΠ΅Ρ: ΠΠ°ΡΠ½ΠΈΡΠ΅ ΠΈΠ½Π²Π΅ΡΡΠΈΡΠΎΠ²Π°ΡΡ Ρ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΉ ΡΡΠΌΠΌΠΎΠΉ.
- ΠΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½:
ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½.
ΠΠ»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ Π²Π΅Π΄Π΅ΡΡΡ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠ° ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠ°Π²ΠΈΠ». ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ Π²ΡΠ΄Π°Π΅ΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΡΠ΅ΡΡΠΈΠΊ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ.
- ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΠΏΠΎ Π²ΡΠ΅ΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌ.
- ΠΠ½Π°Π»ΠΈΠ· ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΠΎΡΡΠΈ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΠΈ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ.
[
{
"recommendations_id": "59efc529-2fff-41af-baff-90ccd7402925",
"count": 42
},
{
"recommendations_id": "147f6a0f-3b91-413b-ab99-87f081d60d5a",
"count": 15
}
]
- Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Ρ Π²Π°Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ:
- Java 17
- Maven
- ΠΠ°Π·Π° Π΄Π°Π½Π½ΡΡ H2 (Π΅ΡΠ»ΠΈ ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅).
- PostgreSQL
- ΠΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ:
git clone https://github.com/eduardkamena/starBankRecommendationService.git
- ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
:
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ Π² PostgreSQL.
- ΠΠ±Π½ΠΎΠ²ΠΈΡΠ΅ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π²
application.properties
:
spring.datasource.url=jdbc:postgresql://localhost:5432/Π²Π°ΡΠ°-Π±Π°Π·Π°-Π΄Π°Π½Π½ΡΡ spring.datasource.username=Π²Π°Ρ-username spring.datasource.password=Π²Π°Ρ-ΠΏΠ°ΡΠΎΠ»Ρ
- ΠΠ°ΡΡΡΠΎΠΉΡΠ΅ Telegram Π±ΠΎΡΠ°:
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π±ΠΎΡΠ° ΡΠ΅ΡΠ΅Π· BotFather.
- Π£ΠΊΠ°ΠΆΠΈΡΠ΅ ΡΠΎΠΊΠ΅Π½ Π±ΠΎΡΠ° Π²
application.properties
:
telegram.bot.token=Π²Π°Ρ-ΡΠΎΠΊΠ΅Π½
- Π‘ΠΎΠ±Π΅ΡΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Maven:
mvn clean install
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅:
mvn spring-boot:run
- ΠΠ»Ρ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅:
mvn test
- Π‘Π΅ΡΠ²ΠΈΡ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ: http://localhost:8085.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ API Π΄ΠΎΡΡΡΠΏΠ½Π° ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ: http://localhost:8085/swagger-ui.html
.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ endpoints
- POST /rule β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ.
- GET /rule/{ruleId} β ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ ID.
- DELETE /rule/{ruleId} β ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ ID.
- GET /rule/allRules β ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ.
- GET /rule/stats β ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΡΠ°ΡΠΈΡΡΠΈΠΊΠΈ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ.
- GET /product/{productId} β ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ΄ΡΠΊΡΠ° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ ΠΏΠΎ ID.
- GET /recommendation/fixed/{userId} β ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
- GET /recommendation/dynamic/{userId} β ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ Π΄Π»Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ.
- POST /management/clear-caches β ΡΠ±ΡΠΎΡ ΠΊΡΡΠ° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ.
- GET /management/info β ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ ΠΎ ΡΠ΅ΡΠ²ΠΈΡΠ΅.).
ΠΠ»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈΡΡ:
- H2 in-memory β Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π·ΠΎΠΉ Π΄Π°Π½Π½ΡΡ .
- WebMvcTests β Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠΎΠ².
- Unit Tests β Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠΎΠ² ΠΈ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠ΅Π².
- ΠΠΎΡΠΎΠ²ΡΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅
resources/dynamicRecommendations/JSON
. - ΠΠ½Π΅ΡΡΠΈ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ Π² Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ
ΠΌΠΎΠΆΠ½ΠΎ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΠ°
POST /rule
. - ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΌ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡΠΌ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΏΠ°ΠΏΠΊΠ΅
resources/dynamicRecommendations/userTest
. - ΠΡΠΎΠ²Π΅ΡΠΊΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΠ°
GET /recommendation/dynamic/{userId}
ΠΡΠ»ΠΈ Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ Ρ ΠΊΠ°ΠΊΠΎΠΉ-ΡΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΎΠΉ ΠΈΠ»ΠΈ Ρ Π²Π°Ρ Π΅ΡΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΏΠΎΠΆΠ°Π»ΡΠΉΡΡΠ°, ΠΎΡΠΊΡΠΎΠΉΡΠ΅ ΡΠ΅ΠΌΡ Π½Π° GitHub Issues
- ΠΠ΄ΡΠ°ΡΠ΄ ΠΠ°ΠΌΠ΅Π½ΡΠΊΠΈΡ β eduardkamena
- ΠΠ»Π΅Π³ Π‘ΠΈΠΌΠ°ΠΊΠΎΠ² β gitWestender
- ΠΠ»Π΅ΠΊΡΠ°Π½Π΄Ρ ΠΠΎΠ²ΠΎΡΠΈΠ½ β Zhizhna