API - moevm/nosql2h24-dogs GitHub Wiki

ПОРОДЫ

Получение всех пород

GET /api/breeds
image

Получения одной породы

GET /api/breeds/{userId}
image
Если ничего не найдено - придёт пустой ответ

Получение краткой информации обо всех породах

GET /api/breeds/info
image

Получение краткой информации об одной породе

GET /api/breeds/{id}/info
image
Если ничего не найдено - придёт пустой ответ

Фильтрация

GET /api/breeds/search
image
Для фильтрации указать необходимые параметры:
string partName - часть имени, которое ищется в имени породы,
int indoorMin - минимум indoor,
int indoorMax - максимум indoor,
int adaptabilityMin - минимум adaptability,
int adaptabilityMax - максимум adaptability,
int affectionLevelMin - минимум affectionLevel,
int affectionLevelMax - максимум affectionLevel,
int childFriendlyMin - минимум childFriendly,
int childFriendlyMax - максимум childFriendly,
int dogFriendlyMin - минимум dogFriendly,
int dogFriendlyMax - максимум dogFriendly,
int energyLevelMin - минимум energyLevel,
int energyLevelMax - максимум energyLevel,
int groomingMin - минимум grooming,
int groomingMax - максимум grooming,
int healthIssuesMin - минимум healthIssues,
int healthIssuesMax - максимум healthIssues,
int intelligenceMin - минимум intelligence,
int intelligenceMax - максимум intelligence,
int sheddingLevelMin - минимум sheddingLevel,
int sheddingLevelMax - максимум sheddingLevel,
int socialNeedsMin - минимум socialNeeds,
int socialNeedsMax - максимум socialNeeds,
int strangerFriendlyMin - минимум strangerFriendly,
int strangerFriendlyMax - максимум strangerFriendly,
int vocalisationMin - минимум vocalisation,
int vocalisationMax - максимум vocalisation,
int experimentalMin - минимум experimental,
int experimentalMax - максимум experimental,
int hairlessMin - минимум hairless,
int hairlessMax - максимум hairless,
int naturalMin - минимум natural,
int naturalMax - максимум natural,
int rareMin - минимум rare,
int rareMax - максимум rare,
int rexMin - минимум rex,
int rexMax - максимум rex,
int suppressedTailMin - минимум suppressedTail,
int suppressedTailMax - максимум suppressedTail,
int shortLegsMin - минимум shortLegs,
int shortLegsMax - максимум shortLegs,
int hypoallergenicMin - минимум hypoallergenic,
int hypoallergenicMax - максимум hypoallergenic,
string[] countryCode - список возможных кодов страны, порода должна соответствовать одному из кодов страны,
string[] origin - список возможных источников происхождения, порода должна соответствовать одному из источников,
string[] temperament - список темпераментов, которые должны быть у породы,
int weightMin - минимум weight,
int weightMax - максимум weight,
int lifeSpanMin - минимум lifeSpan,
int lifeSpanMax - максимум lifeSpan

фильтрация через body

POST /api/breeds/bodySearch
image

формат тела запроса:
{
"part_name":"...", - часть имени, которая должна входить в имя породы (необязательный элемент)
"filter_number": [], - параметры, по которым надо фильтровать со значениями от 0 до 5. Названия параметров можно посмотреть выше (необязательный элемент)
"filter_bigger_number": [], - параметры, по которым надо фильтровать с неопределённым диапазоном значений. Названия параметров можно посмотреть выше(необязательный элемент)
"filter_temperament": [], - темперамент, который должен быть у породы (необязательный элемент. Если список пустой - считается, что фильтр не применён.)
"filter_country": [], - страны, в которые должна входить порода (необязательный элемент)
"filter_country_codes": [] - коды стран, в которые должна входить порода (необязательный элемент. Если список пустой - считается, что фильтр не применён.)
}

пример тела запроса:
{ "part_name":"a", "filter_number": [ { "id": "1", "value": "adaptability", "from": 1, "to": 5 }, { "id": "22", "value": "indoor", "from": 0, "to": 3 } ], "filter_bigger_number": [ { "id": "15", "value": "weight", "from": 0, "to": 17 }, { "id": "12", "value": "lifeSpan", "from": 5, "to": 100 } ], "filter_temperament": [ { "id": "21", "value": "Active" } ], "filter_country": [ { "id": "1", "value": "Greece" }, { "id": "2", "value": "Cyprus" } ], "filter_country_codes": [ { "id": "1", "value": "SG" },

    {
        "id": "13",
        "value": "GR"
    }, 

    {
        "id": "13",
        "value": "EG"
    }
]

}

Поиск с фильтрами и пагинацией

POST /api/breeds/bodySearch/{breedsPerPages}/{pageNumber}
image
пример тела запроса есть выше

Запрос количества страниц для пагинации

POST /api/breeds/bodySearch/{breedsPerPages} возвращается количество страниц и число пород, найденных по фильтру
image

пример тела запроса есть выше


Пользователи

Добавить пользователя

POST /api/users
image

Проверить данные пользователя

GET /api/users/{name}/{passwordHash}
image
image
при верных данных пользователя выдаются его данные, при неверных данных пользователя сервер выдаст ошибку

Сделать пользователя админом

PUT /api/users/toAdmin/{name}
image

Сделать пользователя не админом

PUT /api/users/toUser/{name}
image

Добавить любимую породу

PUT /api/users/addFavorite/{name}/{breedId}
image

Удалить любимую породу

PUT /api/users/removeFavorite/{name}/{breedId}
image

Редактировать возраст[хэшПароля/фото]

PUT /api/users/age[passwordHash/image]/{age[passwordHash/image]}/{userId}
Если всё хорошо, то вернётся статус 200, иначе вернётся ошибка
image
image
image
image


События

Получение всех событий

GET /api/events
image

получение всех событий по пользователю

GET /api/events/{id}
image

Добавление события

POST /api/events
image

Удаление события

DELETE /api/events/{id}
image

Получение лайков [комментариев/остального]

GET /api/events/likes[reply/breed_comments]/{id}
лайки показывают, какие лайки поставили/убрали ему
image
реплаи показывают ответы на комментарии пользователя
image
комментарии к породам показывают комменатрии, которые оставили к любимым породам (пользователю интересно, что там обсуждают про его любимую породу)
image


Комментарии

Добавление комментария

POST /api/comments

image
image
image

{
"userId":"Sasha", - id автора комментария
"breedId":"abob", - id породы, к которой нужно добавить комментарий
"text":"reply from postman", - текст комментария
"parentCommentId":"-204672733" - id комментария-родителя. Если нет родителя, то не надо указывать
}
возвращает id, который присвоен добавленному комментария (или null, если не удалось добавить комментарий)

Получение комментария по породе

GET /api/comments/byBreed/{breedId}
image
Если нет комментариев - пустой список
image

Если порода не найдена, то ничего не возвращает (могу кидать ошибку, если так будет удобнее)
image

Добавить лайк

PUT /api/comments/like/{userId}/{breedId}/{commentId}
image
image

Вернёт статус 200, если всё хорошо, и 404, если что-то не получилось

убрать лайк

PUT /api/comments/remove-like/{userId}/{breedId}/{commentId}

image

image

Вернёт статус 200, если всё хорошо, и 404, если что-то не получилось

В events всё записывается автоматически
image
image


импорт и экспорт

импорт

POST /api/import
В теле json в формате {
"breeds": [{...}, {...}]
"users": [{...}, {...}]
"events": [{...}, {...}]
} Приходит ответ 200, если всё хорошо

image
ВАЖНО: пример можно получить с помощью экпорта - выхход на экспорте = входу на импорте Пример запроса: { "breeds": [ { "id": "abys", "weight_min": 3, "weight_max": 5, "name": "Abyssinian", "cfa_url": "http://cfa.org/Breeds/BreedsAB/Abyssinian.aspx", "vetstreet_url": "http://www.vetstreet.com/cats/abyssinian", "vcahospitals_url": "https://vcahospitals.com/know-your-pet/cat-breeds/abyssinian", "temperament": [ "Active", "Independent", "Intelligent", "Energetic", "Gentle" ], "origin": "Egypt", "country_codes": "EG", "country_code": "EG", "description": "The Abyssinian is easy to care for, and a joy to have in your home. They’re affectionate cats and love both people and other animals.", "life_span_min": 14, "life_span_max": 15, "indoor": 0, "lap": 1, "alt_names": "", "adaptability": 5, "affection_level": 5, "child_friendly": 3, "dog_friendly": 4, "energy_level": 5, "grooming": 1, "health_issues": 2, "intelligence": 5, "shedding_level": 2, "social_needs": 5, "stranger_friendly": 5, "vocalisation": 1, "experimental": 0, "hairless": 0, "natural": 1, "rare": 0, "rex": 0, "suppressed_tail": 0, "short_legs": 0, "wikipedia_url": "https://en.wikipedia.org/wiki/Abyssinian_(cat)", "hypoallergenic": 0, "reference_image_id": "0XYvRd7oD", "comments": [ { "id": "-1225459482", "author": "1", "parent_comment_id": "Sasha", "date": "2024-11-14T09:17:07.722+00:00", "text": "My favorite!" } ] }, { "id": "aege", "weight_min": 3, "weight_max": 5, "name": "Aegean", "cfa_url": null, "vetstreet_url": "http://www.vetstreet.com/cats/aegean-cat", "vcahospitals_url": null, "temperament": [ "Social", "Active", "Playful", "Intelligent", "Affectionate" ], "origin": "Greece", "country_codes": "GR", "country_code": "GR", "description": "Native to the Greek islands known as the Cyclades in the Aegean Sea, these are natural cats, meaning they developed without humans getting involved in their breeding. As a breed, Aegean Cats are rare, although they are numerous on their home islands. They are generally friendly toward people and can be excellent cats for families with children.", "life_span_min": 9, "life_span_max": 12, "indoor": 0, "lap": 0, "alt_names": "", "adaptability": 5, "affection_level": 4, "child_friendly": 4, "dog_friendly": 4, "energy_level": 3, "grooming": 3, "health_issues": 1, "intelligence": 3, "shedding_level": 3, "social_needs": 4, "stranger_friendly": 4, "vocalisation": 3, "experimental": 0, "hairless": 0, "natural": 0, "rare": 0, "rex": 0, "suppressed_tail": 0, "short_legs": 0, "wikipedia_url": "https://en.wikipedia.org/wiki/Aegean_cat", "hypoallergenic": 0, "reference_image_id": "ozEvzdVM-", "comments": null }, { "id": "abob", "weight_min": 3, "weight_max": 7, "name": "American Bobtail", "cfa_url": "http://cfa.org/Breeds/BreedsAB/AmericanBobtail.aspx", "vetstreet_url": "http://www.vetstreet.com/cats/american-bobtail", "vcahospitals_url": "https://vcahospitals.com/know-your-pet/cat-breeds/american-bobtail", "temperament": [ "Sensitive", "Playful", "Intelligent", "Interactive", "Lively" ], "origin": "United States", "country_codes": "US", "country_code": "US", "description": "American Bobtails are loving and incredibly intelligent cats possessing a distinctive wild appearance. They are extremely interactive cats that bond with their human family with great devotion.", "life_span_min": 11, "life_span_max": 15, "indoor": 0, "lap": 1, "alt_names": "", "adaptability": 5, "affection_level": 5, "child_friendly": 4, "dog_friendly": 5, "energy_level": 3, "grooming": 1, "health_issues": 1, "intelligence": 5, "shedding_level": 3, "social_needs": 3, "stranger_friendly": 3, "vocalisation": 3, "experimental": 0, "hairless": 0, "natural": 0, "rare": 0, "rex": 0, "suppressed_tail": 1, "short_legs": 0, "wikipedia_url": "https://en.wikipedia.org/wiki/American_Bobtail", "hypoallergenic": 0, "reference_image_id": "hBXicehMA", "comments": [ { "id": "-458483531", "author": "Sasha", "date": "2024-11-14T09:17:08.490+00:00", "text": "my comment" } ] }, { "id": "acur", "weight_min": 2, "weight_max": 5, "name": "American Curl", "cfa_url": "http://cfa.org/Breeds/BreedsAB/AmericanCurl.aspx", "vetstreet_url": "http://www.vetstreet.com/cats/american-curl", "vcahospitals_url": "https://vcahospitals.com/know-your-pet/cat-breeds/american-curl", "temperament": [ "Social", "Curious", "Playful", "Intelligent", "Interactive", "Lively", "Affectionate" ], "origin": "United States", "country_codes": "US", "country_code": "US", "description": "Distinguished by truly unique ears that curl back in a graceful arc, offering an alert, perky, happily surprised expression, they cause people to break out into a big smile when viewing their first Curl. Curls are very people-oriented, faithful, affectionate soulmates, adjusting remarkably fast to other pets, children, and new situations.", "life_span_min": 12, "life_span_max": 16, "indoor": 0, "lap": 1, "alt_names": "", "adaptability": 5, "affection_level": 5, "child_friendly": 4, "dog_friendly": 5, "energy_level": 3, "grooming": 2, "health_issues": 1, "intelligence": 3, "shedding_level": 3, "social_needs": 3, "stranger_friendly": 3, "vocalisation": 3, "experimental": 0, "hairless": 0, "natural": 0, "rare": 0, "rex": 0, "suppressed_tail": 0, "short_legs": 0, "wikipedia_url": "https://en.wikipedia.org/wiki/American_Curl", "hypoallergenic": 0, "reference_image_id": "xnsqonbjW", "comments": null } ], "users": [ { "name": "Sasha", "age": 21, "passwordHash": "111111", "image": "image1", "creationDate": "2024-11-11T14:47:34.305+00:00", "lastDate": "2024-11-11T14:47:34.305+00:00", "favorites": [], "admin": false }, { "name": "Margo", "age": 21, "passwordHash": "222222", "image": "image2", "creationDate": "2024-11-11T14:47:34.358+00:00", "lastDate": "2024-11-11T14:47:34.358+00:00", "favorites": [], "admin": true }, { "name": "Karim", "age": 21, "passwordHash": "222222", "image": "image3", "creationDate": "2024-11-11T14:47:34.361+00:00", "lastDate": "2024-11-11T14:47:34.361+00:00", "favorites": [], "admin": true } ], "events": [ { "id": "67321906a3e83668ef9926f7", "userId": "Sasha", "breedId": "abys", "type": "LIKE", "date": "2024-11-11T14:47:34.770+00:00" }, { "id": "67321906a3e83668ef9926f8", "userId": "Sasha", "breedId": "abys", "type": "COMMENT", "date": "2024-11-11T14:47:34.770+00:00" } ] }

экспорт

GET /api/export image
пример ответа выше в экспорте