ΠΠΈΠΊΡΠΎΡΠ΅ΡΠ²ΠΈΡ Π½Π° Ruby, ΠΊΠΎΡΠΎΡΡΠΈΜ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΠΌ (ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°ΠΌ) ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ Ρ ΠΌΠ΅Π΄ΠΈΡΠΈΠ½ΡΠΊΠΈΠΌΠΈ ΡΠΏΠ΅ΡΠΈΠ°Π»ΠΈΡΡΠ°ΠΌΠΈ ΠΈ ΠΏΠΎΠ»ΡΡΠ°ΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π°Π½Π°Π»ΠΈΠ·Π° ΠΈΡ ΠΌΠ΅Π΄ΠΈΡΠΈΠ½ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ , ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΡ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ API.
- ΠΡΠΏΡΠ°Π²ΠΊΠ° Π·Π°ΠΏΡΠΎΡΠΎΠ² Π½Π° ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ
- ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· ΠΌΠ΅Π΄ΠΈΡΠΈΠ½ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Π²Π½Π΅ΡΠ½Π΅Π³ΠΎ API 3. Π€ΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈΜ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°ΠΌ
-
ΠΠ°ΡΠΈΠ΅Π½Ρ (Π€ΠΠ, Π΄Π°ΡΠ° ΡΠΎΠΆΠ΄Π΅Π½ΠΈΡ, Π½ΠΎΠΌΠ΅Ρ ΡΠ΅Π»Π΅ΡΠΎΠ½Π°, email)
-
ΠΠ°ΠΏΡΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ (ΠΏΠ°ΡΠΈΠ΅Π½Ρ, ΡΠ΅ΠΊΡΡ Π·Π°ΠΏΡΠΎΡΠ°, Π΄Π°ΡΠ° ΡΠΎΠ·Π΄Π°Π½ΠΈΡ)
-
Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΡ (Π·Π°ΠΏΡΠΎΡ Π½Π° ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ, ΡΠ΅ΠΊΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ)
-
POST /consultation_requests - ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ
-
POST /consultation_requests/:request_id/recommendations - ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ
-
GET /patients/:patient_id/recommendations - ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈΜ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°
ΠΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°Π½ Π²Π½Π΅ΡΠ½ΠΈΠΈΜ API Π΄Π»Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΠΌΠ΅Π΄ΠΈΡΠΈΠ½ΡΠΊΠΈΡ Π΄Π°Π½Π½ΡΡ (OpenFDA).
PostgreSQL: 1.1
dry-rb: Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ 'dry-validation'
ΠΡΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΏΠΎΠΌΠΎΠ³ΡΡ Π²Π°ΠΌ ΡΠΎΠ·Π΄Π°ΡΡ ΠΊΠΎΠΏΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ Π½Π° Π²Π°ΡΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅.
Π§ΡΠΎ Π½ΡΠΆΠ½ΠΎ ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ, ΡΡΠΎΠ±Ρ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΡΠΎΠ΅ΠΊΡ:
-
ruby "3.2.2"
-
rails "7.0.8"
-
PostgreSQL
-
dry-rb
ΠΠΎΡΠ°Π³ΠΎΠ²Π°Ρ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠΏΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ° ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π΅ Π½Π° Π²Π°ΡΠ΅ΠΉ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΌΠ°ΡΠΈΠ½Π΅.
- ΠΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ:
git clone https://github.com/rovezuka/online-recommendations-service
- ΠΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² ΠΊΠ°ΡΠ°Π»ΠΎΠ³ ΠΏΡΠΎΠ΅ΠΊΡΠ°:
cd online-recommendations-service
- Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ:
bundle install
- Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΠ΅ ΠΌΠΈΠ³ΡΠ°ΡΠΈΠΈ:
rails db:create
rails db:migrate
- ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅ΡΠ²Π΅Ρ:
rails server
ΠΠ°ΠΊ ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°:
# ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ rails console
Patient.create(full_name: 'ΠΠ²Π°Π½ ΠΠ²Π°Π½ΠΎΠ²', date_of_birth: '1990-01-01', phone_number: '123-456-7890', email: 'ivan@example.com')
Π’ΠΈΠΏ Π·Π°ΠΏΡΠΎΡΠ°: POST URL: http://localhost:3000/consultation_requests
Content-Type: application/json
Body (raw JSON):
{
"patient_id": 1,
"text": "ΠΡΠΎΡΡ ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ ΠΏΠΎ ΠΌΠΎΠ΅ΠΌΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ."
}
POST /consultation_requests/:request_id/recommendations - ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ
Π’ΠΈΠΏ Π·Π°ΠΏΡΠΎΡΠ°: POST
URL: http://localhost:3000/consultation_requests/1/recommendations (Π³Π΄Π΅ 1 - ID Π·Π°ΠΏΡΠΎΡΠ° Π½Π° ΠΊΠΎΠ½ΡΡΠ»ΡΡΠ°ΡΠΈΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ)
Content-Type: application/json
GET /patients/:patient_id/recommendations - ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠ° ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΉ Π΄Π»Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°
Π’ΠΈΠΏ Π·Π°ΠΏΡΠΎΡΠ°: GET
URL: http://localhost:3000/patients/1/recommendations (Π³Π΄Π΅ 1 - ID ΠΏΠ°ΡΠΈΠ΅Π½ΡΠ°, Π΄Π»Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Π²Ρ Ρ ΠΎΡΠΈΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄Π°ΡΠΈΠΈ)
ΠΡΠΎΡ ΠΏΡΠΎΠ΅ΠΊΡ Π»ΠΈΡΠ΅Π½Π·ΠΈΡΠΎΠ²Π°Π½ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ Π»ΠΈΡΠ΅Π½Π·ΠΈΠ΅ΠΉ MIT - ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎΡΡΠΈ ΡΠΌ. Π² ΡΠ°ΠΉΠ»Π΅ LICENSE.md.