Skip to content

Repository files navigation

Косяков ΠœΠ°Ρ‚Π²Π΅ΠΉ Π³Ρ€. 253505

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ "Library Management System API"

ОписаниС: БистСма ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ - это ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ΅ обСспСчСниС, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ΅ для Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΈ основных Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹Ρ… процСссов. Она позволяСт ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅, поиск, Π²Ρ‹Π΄Π°Ρ‡Ρƒ ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ½ΠΈΠ³, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ ΠΎ читатСлях Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

ЦСль ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°: ΠΏΠΎΠ²Ρ‹ΡΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒ доступ ΠΊ Π΅Π΅ рСсурсам ΠΈ ΠΎΠ±Π»Π΅Π³Ρ‡ΠΈΡ‚ΡŒ взаимодСйствиС ΠΌΠ΅ΠΆΠ΄Ρƒ библиотСкарями ΠΈ читатСлями.

1. МодСли Π΄Π°Π½Π½Ρ‹Ρ…:

DataModels

МодСль Member:

  • ID (string): Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‡Π»Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  • Name (string): Имя Ρ‡Π»Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  • Address (string): АдрСс проТивания Ρ‡Π»Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  • Email (string): ЭлСктронная ΠΏΠΎΡ‡Ρ‚Π° Ρ‡Π»Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.
  • CreatedAt (time): ВрСмя рСгистрации Ρ‡Π»Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π² систСмС.

МодСль Book:

  • ID (string): Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ½ΠΈΠ³ΠΈ.
  • Title (string): НазваниС ΠΊΠ½ΠΈΠ³ΠΈ.
  • Author (string): Автор ΠΊΠ½ΠΈΠ³ΠΈ.
  • PublicationYear (int): Π“ΠΎΠ΄ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠ½ΠΈΠ³ΠΈ.
  • Genre (string): Π–Π°Π½Ρ€ ΠΊΠ½ΠΈΠ³ΠΈ.
  • AvailableCopies (int): ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ доступных ΠΊΠΎΠΏΠΈΠΉ ΠΊΠ½ΠΈΠ³ΠΈ.
  • TotalCopies (int): ΠžΠ±Ρ‰Π΅Π΅ количСство ΠΊΠΎΠΏΠΈΠΉ ΠΊΠ½ΠΈΠ³ΠΈ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ΅.

МодСль Borrowing:

  • ID (string): Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ записи ΠΎ заимствовании ΠΊΠ½ΠΈΠ³ΠΈ.
  • BookID (string): Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠ½ΠΈΠ³ΠΈ, которая Π±Ρ‹Π»Π° заимствована.
  • MemberID (string): Π˜Π΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ Ρ‡Π»Π΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ заимствовал ΠΊΠ½ΠΈΠ³Ρƒ.
  • BorrowYear (int): Π“ΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ½ΠΈΠ³Π° Π±Ρ‹Π»Π° заимствована.
  • ReturnYear (int): Π“ΠΎΠ΄, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ½ΠΈΠ³Π° Π±Ρ‹Π»Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π°.

ВсС ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ строковый Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… для ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ², Ρ‡Ρ‚ΠΎ позволяСт ΠΈΠΌ Π±Ρ‹Ρ‚ΡŒ Π³ΠΈΠ±ΠΊΠΈΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ObjectID() для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ структуру для ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ хранСния ΠΈΡ… Π² MongoDB. МодСль Member Ρ…Ρ€Π°Π½ΠΈΡ‚ Π±Π°Π·ΠΎΠ²ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ читатСлях. МодСль Book Ρ…Ρ€Π°Π½ΠΈΡ‚ ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠ½ΠΈΠ³Π°Ρ…. МодСль Borrowing отслСТиваСт заимствования ΠΊΠ½ΠΈΠ³. ВсС Ρ‚ΠΈΠΏΡ‹ связи Π² модСлях ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ One-to-Many.

2. Π˜Π½ΡΡ‚Ρ€ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ для хранСния Π΄Π°Π½Π½Ρ‹Ρ…:

DataStorage

2.1. Абстрактная Ρ„Π°Π±Ρ€ΠΈΠΊΠ°:

  • StorageFactory: Абстрактная Ρ„Π°Π±Ρ€ΠΈΠΊΠ°, прСдставлСнная интСрфСйсом. Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π½Π΅ содСрТит Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ, ΠΎΠ½ лишь Π·Π°Π΄Π°Π΅Ρ‚ ΠΎΠ±Ρ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Ρ€Π°ΠΊΡ‚ для создания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² хранСния.

2.2. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ:

  • LocalStorageFactory: Π€Π°Π±Ρ€ΠΈΠΊΠ°, которая ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС экзСмпляров LocalStorage. ЯвляСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ интСрфСйса StorageFactory.
  • MongoDBStorageFactory: Π€Π°Π±Ρ€ΠΈΠΊΠ°, которая ΠΎΡ‚Π²Π΅Ρ‡Π°Π΅Ρ‚ Π·Π° созданиС экзСмпляров MongoDBStorage. ЯвляСтся ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ интСрфСйса StorageFactory. Π­Ρ‚Π° Ρ„Π°Π±Ρ€ΠΈΠΊΠ° Π±ΠΎΠ»Π΅Π΅ слоТная, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π΅ΠΉ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΊ Π±Π°Π·Π΅ Π΄Π°Π½Π½Ρ‹Ρ… MongoDB, ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ для ΠΊΠ½ΠΈΠ³, Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ заимствований, Π° Π·Π°Ρ‚Π΅ΠΌ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ MongoDBStorage.

2.3. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹:

  • Storage Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ CRUD-ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΊΠ½ΠΈΠ³Π°ΠΌΠΈ (Book), читатСлями (Member) ΠΈ заимствованиями (Borrowing).
    • LocalStorage, MongoDBStorage: ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса для хранСния Ρ‡Π»Π΅Π½ΠΎΠ² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠ½ΠΈΠ³ ΠΈ заимствования ΠΊΠ½ΠΈΠ³ локально ΠΈ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… MongoDB соотвСтствСнно.

2.4. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹:

StorageFactory:

  • CreateStorage(): Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ интСрфСйса Storage Π² зависимости ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ.

Storage:

  • GetAllMembersStorage(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список всСх Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ.
  • GetMemberStorage(id string): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ ΠΏΠΎ Π΅Π³ΠΎ ID.
  • AddMemberStorage(member Member): ДобавляСт Π½ΠΎΠ²ΠΎΠ³ΠΎ читатСля Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, принимая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Member с Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.
  • UpdateMemberStorage(id string, member Member): ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ ΠΏΠΎ Π΅Π³ΠΎ ID, принимая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Member с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.
  • DeleteMemberStorage(id string): УдаляСт читатСля ΠΏΠΎ Π΅Π³ΠΎ ID.
  • GetAllBooksStorage(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список всСх ΠΊΠ½ΠΈΠ³.
  • GetBookStorage(id string): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅ ΠΏΠΎ Π΅Π΅ ID.
  • AddBookStorage(book Book): ДобавляСт Π½ΠΎΠ²ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ, принимая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Book с Π΅Π΅ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.
  • UpdateBookStorage(id string, book Book): ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠ½ΠΈΠ³Π΅ ΠΏΠΎ Π΅Π΅ ID, принимая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Book с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.
  • DeleteBookStorage(id string): УдаляСт ΠΊΠ½ΠΈΠ³Ρƒ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎ Π΅Π΅ ID.
  • GetAllBorrowingsStorage(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список всСх заимствований ΠΊΠ½ΠΈΠ³.
  • GetBorrowingStorage(id string): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ заимствовании ΠΏΠΎ Π΅Π³ΠΎ ID.
  • AddBorrowingStorage(borrowing Borrowing): ДобавляСт Π½ΠΎΠ²ΠΎΠ΅ заимствованиС ΠΊΠ½ΠΈΠ³ΠΈ, принимая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Borrowing с Π΅Π³ΠΎ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.
  • UpdateBorrowingStorage(id string, borrowing Borrowing): ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ заимствовании ΠΏΠΎ Π΅Π³ΠΎ ID, принимая ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Borrowing с Π½ΠΎΠ²Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ.
  • DeleteBorrowingStorage(id string): УдаляСт заимствованиС ΠΊΠ½ΠΈΠ³ΠΈ ΠΏΠΎ Π΅Π³ΠΎ ID.

2.4. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹:

  • GetStorageFactory(): ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ Ρ‚ΠΈΠΏ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π° ("local" ΠΈΠ»ΠΈ "mongodb") ΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΡƒΡŽ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, абстрактная Ρ„Π°Π±Ρ€ΠΈΠΊΠ° позволяСт Π°Π±ΡΡ‚Ρ€Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² хранСния ΠΈ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ ΠΈΡ… с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠ±Ρ‰Π΅Π³ΠΎ интСрфСйса. Π­Ρ‚ΠΎ позволяСт Π»Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ Π½ΠΎΠ²Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰ Π±Π΅Π· измСнСния ΠΊΠΎΠ΄Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ эти ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹.

3. БизнСс-Π»ΠΎΠ³ΠΈΠΊΠ°:

Repository

3.1. Repository:

  • Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ прСдставляСт собой слой бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ. Он ΠΈΠΌΠ΅Π΅Ρ‚ доступ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, взаимодСйствуСт с Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅ΠΌ (Storage). Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ для Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ (MemberRepository), ΠΊΠ½ΠΈΠ³ (BookRepository) ΠΈ заимствований (BorrowingRepository) Π΄ΠΎΠΏΠΎΠ»Π½ΡΡŽΡ‚ структуру класса Repository.

3.2. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ:

  • MemberRepository, BookRepository, BorrowingRepository Π Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‚ бизнСс-Π»ΠΎΠ³ΠΈΠΊΡƒ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ….

3.3. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹:

MemberRepository:

  • GetAllMembers(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список всСх Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΉ.
  • GetMember(id string): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅.
  • AddMember(name string, address string, email string): ДобавляСт Π½ΠΎΠ²ΠΎΠ³ΠΎ читатСля Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.
  • UpdateMember(id string, name *string, address *string, email *string): ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅.
  • DeleteMember(id string): УдаляСт читатСля.

BookRepository:

  • GetAllBooks(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список всСх ΠΊΠ½ΠΈΠ³.
  • GetBook(id string): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΉ ΠΊΠ½ΠΈΠ³Π΅.
  • AddBook(title string, author string, publicationYear int, genre string, totalCopies int): ДобавляСт Π½ΠΎΠ²ΡƒΡŽ ΠΊΠ½ΠΈΠ³Ρƒ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ.
  • UpdateBook(id *string, title *string, author *string, publicationYear *int, genre *string, availableCopies *int, totalCopies *int): ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ ΠΊΠ½ΠΈΠ³Π΅.
  • DeleteBook(id string): УдаляСт ΠΊΠ½ΠΈΠ³Ρƒ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ.

BookRepository:

  • GetAllBorrowings(): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список всСх заимствований ΠΊΠ½ΠΈΠ³.
  • GetMemberBooks(memberID string): Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ список ΠΊΠ½ΠΈΠ³, заимствованных ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΌ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»Π΅ΠΌ.
  • BorrowBook(bookID string, memberID string, borrowYear int): Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ заимствованиС ΠΊΠ½ΠΈΠ³ΠΈ.
  • ReturnBook(id string): Π—Π°Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ ΠΊΠ½ΠΈΠ³ΠΈ.

3.4. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€Ρ‹:

  • NewRepository(): создаСт класс Repository.

4. БСрвис, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ API:

APIService

4.1. РСализация:

  • APIService - это сСрвис, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ прСдоставляСт API. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ слой бизнСс-Π»ΠΎΠ³ΠΈΠΊΠΈ (Repository) Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ происходит основныС манипуляции с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Π° Π·Π°Ρ‚Π΅ΠΌ Π·Π°ΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ Π² Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅. APIService Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ API-запросов. Π•Π³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π² своСй Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ класса Repository.

4.2. ΠœΠ΅Ρ‚ΠΎΠ΄Ρ‹ (ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ API-запросов):

Member:

  • getAllMembersHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetAllMembers. GET /members
  • getMemberHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetMember. GET /members/{memberID}
  • addMemberHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ AddMember. POST /members
  • deleteMemberHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ DeleteMember. DELETE /members/{memberID}
  • updateMemberHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ UpdateMember. PUT /members/{memberID}

Книги:

  • getAllBooksHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetAllBooks. GET /books
  • getBookHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetBook. GET /books/{bookID}
  • addBookHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ AddBook. POST /books
  • deleteBookHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ DeleteBook. DELETE /books/{bookID}
  • updateBookHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ UpdateBook. PUT /books/{bookID}

Заимствования:

  • getAllBorrowingsHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetAllBorrowings. GET /borrowings
  • getMemberBooksHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ GetMemberBooks. GET /borrowings/{memberID}
  • borrowBookHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ BorrowBook. POST /borrowings
  • returnBookHandler(): ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠ΄ ReturnBook. PUT /borrowings/{borrowingID}

3.3. ΠšΠΎΠ½ΡΡ‚Ρ€ΡƒΠΊΡ‚ΠΎΡ€:

  • NewAPIService(): Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ экзСмпляр сСрвиса APIService. РСализация конструктора создаСт singleton, Ρ‡Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… прилоТСния Π±ΡƒΠ΄Π΅Ρ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр APIService.

3.4. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

  • RegisterAPIEndpoints(apiService *APIService): РСгистрируСт ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ API-запросов для сСрвиса.
  • StartServer(handler http.Handler): ЗапускаСт сСрвСр.

4. ΠžΠ±Ρ‰Π°Ρ структура ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°:

Architecture

About

πŸ“š Golang API for efficient library management, facilitating book storage, search, lending, and patron information management

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages