[Вступление

Архитектура](http://catethysis.ru/?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_тега.

Выход: -