[Вступление
Архитектура](/?p=230 “Тег-ориентированная файловая система — архитектура”)
API устроен следующим образом.
Содержание:
Запрос картинки
Вход: GUID картинки.
Процесс: из таблицы PhotoTags получаем перечень записей, относящихся к искомой фотографии — это номера тегов. Inner join`ом превращаем их в названия тегов.
Выход: дата фотографии, список номеров тегов с названиями тегов.
Запрос архива фотографий
Вход: номер тега, или null для получения полного архива.
Процесс: проходим по таблице PhotoTags, ищем все записи с искомым тегом (или вообще все записи если тег не указан). Группируем по GUID, т.е. получаем напротив каждого GUID список номеров тегов. Из таблицы тегов получаем их названия.
Выход: список GUID`ов, у каждого GUID — список номеров и названий тегов.
Запрос списка тегов
Вход: —
Процесс: проходим по таблице PhotoTags, группируем записи по номерам тегов, считаем размер каждой группы и упорядочиваем список по убыванию.
Выход: список номеров, названий тегов и их популярности, упорядоченный по убыванию популярности.
Добавление фотографии
Вход: временный адрес фотографии в папке загрузок
Процесс: генерируем GUID, копируем фотографию в нашу папку (с именем GUID), генерируем два размера картинок (с шириной 1620 пкс и 160 пкс), читаем EXIF-тег времени съёмки. В таблицу фотографий добавляем запись: GUID, время съёмки.
Выход: GUID.
Добавление тегов
Вход: GUID, список тегов
Процесс: из таблицы тегов берём все их названия, ищем отрицание пересечения двух массивов. Новые теги, не существующие пока в таблице — добавляем в неё. Снова получаем массив тегов из таблицы, ищем в нём номера введённых тегов, и добавляем в базу PhotoTags записи: GUID, id_тега.
Выход: –