API - moevm/nosql2h24-dogs GitHub Wiki
ПОРОДЫ
Получение всех пород
GET /api/breeds
Получения одной породы
GET /api/breeds/{userId}
Если ничего не найдено - придёт пустой ответ
Получение краткой информации обо всех породах
GET /api/breeds/info
Получение краткой информации об одной породе
GET /api/breeds/{id}/info
Если ничего не найдено - придёт пустой ответ
Фильтрация
GET /api/breeds/search
Для фильтрации указать необходимые параметры:
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
формат тела запроса:
{
"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}
пример тела запроса есть выше
Запрос количества страниц для пагинации
POST /api/breeds/bodySearch/{breedsPerPages}
возвращается количество страниц и число пород, найденных по фильтру
пример тела запроса есть выше
Пользователи
Добавить пользователя
POST /api/users
Проверить данные пользователя
GET /api/users/{name}/{passwordHash}
при верных данных пользователя выдаются его данные, при неверных данных пользователя сервер выдаст ошибку
Сделать пользователя админом
PUT /api/users/toAdmin/{name}
Сделать пользователя не админом
PUT /api/users/toUser/{name}
Добавить любимую породу
PUT /api/users/addFavorite/{name}/{breedId}
Удалить любимую породу
PUT /api/users/removeFavorite/{name}/{breedId}
Редактировать возраст[хэшПароля/фото]
PUT /api/users/age[passwordHash/image]/{age[passwordHash/image]}/{userId}
Если всё хорошо, то вернётся статус 200, иначе вернётся ошибка
События
Получение всех событий
GET /api/events
получение всех событий по пользователю
GET /api/events/{id}
Добавление события
POST /api/events
Удаление события
DELETE /api/events/{id}
Получение лайков [комментариев/остального]
GET /api/events/likes[reply/breed_comments]/{id}
лайки показывают, какие лайки поставили/убрали ему
реплаи показывают ответы на комментарии пользователя
комментарии к породам показывают комменатрии, которые оставили к любимым породам (пользователю интересно, что там обсуждают про его любимую породу)
Комментарии
Добавление комментария
POST /api/comments
{
"userId":"Sasha", - id автора комментария
"breedId":"abob", - id породы, к которой нужно добавить комментарий
"text":"reply from postman", - текст комментария
"parentCommentId":"-204672733" - id комментария-родителя. Если нет родителя, то не надо указывать
}
возвращает id, который присвоен добавленному комментария (или null, если не удалось добавить комментарий)
Получение комментария по породе
GET /api/comments/byBreed/{breedId}
Если нет комментариев - пустой список
Если порода не найдена, то ничего не возвращает (могу кидать ошибку, если так будет удобнее)
Добавить лайк
PUT /api/comments/like/{userId}/{breedId}/{commentId}
Вернёт статус 200, если всё хорошо, и 404, если что-то не получилось
убрать лайк
PUT /api/comments/remove-like/{userId}/{breedId}/{commentId}
Вернёт статус 200, если всё хорошо, и 404, если что-то не получилось
В events всё записывается автоматически
импорт и экспорт
импорт
POST /api/import
В теле json в формате
{
"breeds": [{...}, {...}]
"users": [{...}, {...}]
"events": [{...}, {...}]
}
Приходит ответ 200, если всё хорошо
ВАЖНО: пример можно получить с помощью экпорта - выхход на экспорте = входу на импорте
Пример запроса:
{
"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
пример ответа выше в экспорте