All Downloads are FREE. Search and download functionalities are using the official Maven repository.

ru.sadv1r.vk.parser.model.Profile.kt Maven / Gradle / Ivy

The newest version!
package ru.sadv1r.vk.parser.model

import com.fasterxml.jackson.annotation.JsonIgnoreProperties
import com.fasterxml.jackson.annotation.JsonProperty
import com.fasterxml.jackson.databind.annotation.JsonDeserialize
import ru.sadv1r.vk.parser.UnixTimestampDeserializer
import java.sql.Timestamp

/**
 * Модель профиля пользователя Вконтакте
 *
 * @author sadv1r
 * @version 0.1
 * @since 0.1
 * @see https://vk.com/dev/fields
 *
 * @property id идентификатор пользователя
 * @property firstName имя пользователя
 * @property lastName фамилия пользователя
 * @property deactivated
 *           Возвращается, если страница пользователя удалена или заблокирована,
 *           содержит значение **deleted** или **banned**. Обратите внимание,
 *           в этом случае дополнительные поля **fields** не возвращаются
 * @property hidden
 *           Возвращается при вызове без *access_token*,если пользователь установил настройку
 *           «Кому в интернете видна моя страница» — «Только пользователям ВКонтакте».
 *           Обратите внимание, в этом случае дополнительные поля **fields** не возвращаются
 * @property photoId
 *           id главной фотографии профиля пользователя в формате **user_id+photo_id**, например, *6492_192164258*.
 *           В некоторых случаях (если фотография была установлена очень давно) это поле не возвращается.
 * @property verified возвращается **1**, если страница пользователя верифицирована, **0** — если не верифицирована
 * @property sex
 *           Пол пользователя. Возможные значения:
 *           *1* — женский;
 *           *2* — мужской;
 *           *0* — пол не указан
 * @property bdate
 *           Дата рождения. Возвращается в формате *DD.MM.YYYY* или *DD.MM* (если год рождения скрыт).
 *           Если дата рождения скрыта целиком, поле отсутствует в ответе
 * @property city информация о городе, указанном на странице пользователя в разделе «Контакты»
 * @property country информация о стране, указанной на странице пользователя в разделе «Контакты»
 * @property homeTown название родного города пользователя
 * @property hasPhoto возвращается **1**, если текущий пользователь установил фотографию для профиля
 * @property photo50
 *           url **квадратной** фотографии пользователя, имеющей ширину 50 пикселей.
 *           В случае отсутствия у пользователя фотографии возвращается
 *           http://vk.com/images/camera_c.gif
 * @property photo100
 *           url **квадратной** фотографии пользователя, имеющей ширину 100 пикселей.
 *           В случае отсутствия у пользователя фотографии возвращается
 *           http://vk.com/images/camera_b.gif
 * @property photo200orig
 *           url фотографии пользователя, имеющей ширину 200 пикселей.
 *           В случае отсутствия у пользователя фотографии возвращается
 *           http://vk.com/images/camera_a.gif
 * @property photo200
 *           url **квадратной** фотографии пользователя, имеющей ширину 200 пикселей.
 *           Если фотография была загружена давно, изображения с такими размерами может не быть,
 *           в этом случае ответ не будет содержать этого поля
 * @property photo400orig
 *           url фотографии пользователя, имеющей ширину 400 пикселей.
 *           Если у пользователя отсутствует фотография такого размера, ответ не будет содержать этого поля
 * @property photoMax
 *           url **квадратной** фотографии пользователя с максимальной шириной.
 *           Может быть возвращена фотография, имеющая ширину как 200, так и 100 пикселей.
 *           В случае отсутствия у пользователя фотографии возвращается
 *           http://vk.com/images/camera_b.gif
 * @property photoMaxOrig
 *           url фотографии пользователя максимального размера.
 *           Может быть возвращена фотография, имеющая ширину как 400, так и 200 пикселей.
 *           В случае отсутствия у пользователя фотографии возвращается
 *           http://vk.com/images/camera_a.gif
 * @property online
 *           Информация о том, находится ли пользователь сейчас на сайте.
 *           Возвращаемые значения: *1* — находится, *0* — не находится.
 *           Если пользователь использует мобильное приложение либо мобильную версию сайта,
 *           возвращается дополнительное поле **online_mobile**, содержащее *1*.
 *           При этом, если используется именно приложение, дополнительно возвращается поле **online_app**,
 *           содержащее его идентификатор.
 * @property lists
 *           Разделенные запятой идентификаторы списков друзей, в которых состоит пользователь.
 *           Поле доступно только для метода [friends.get].
 *           Получить информацию об id и названиях списков друзей можно с помощью метода [friends.getLists].
 *           Если пользователь не состоит ни в одном списке друзей, данное поле отсутствует в ответе
 * @property domain
 *           Короткий адрес страницы. Возвращается строка, содержащая короткий адрес страницы
 *           (возвращается только сам поддомен, например, *andrew*).
 *           Если он не назначен, возвращается **"id"+uid**, например, *id35828305*
 * @property hasMobile
 *           Информация о том, известен ли номер мобильного телефона пользователя.
 *           Возвращаемые значения: 1 — известен, 0 — не известен.
 *           Рекомендуется использовать перед вызовом метода [secure.sendSMSNotification]
 * @property mobilePhone
 *           Номер мобильного телефона пользователя (только для Standalone-приложений).
 *           Если данные указаны и не скрыты настройками приватности
 * @property homePhone
 *           Дополнительный номер телефона пользователя.
 *           Если данные указаны и не скрыты настройками приватности
 * @property site возвращает указанный в профиле сайт пользователя
 * @property education информация о высшем учебном заведении пользователя
 * @property universities список высших учебных заведений, в которых учился текущий пользователь.
 * @property schools список школ, в которых учился пользователь
 * @property status
 *           Статус пользователя. Возвращается строка, содержащая текст статуса,
 *           расположенного в профиле под именем пользователя.
 *           Если у пользователя включена опция «Транслировать в статус играющую музыку»,
 *           будет возвращено дополнительное поле **status_audio**, содержащее информацию о транслируемой композиции
 * @property statusAudio информация о транслируемой композиции
 * @property lastSeen время последнего посещения
 * @property followersCount количество подписчиков пользователя
 * @property commonCount количество общих друзей с текущим пользователем
 * @property counters
 *           Количество различных объектов у пользователя.
 *           Может быть использовано только в методе [users.get] при запросе информации об одном пользователе,
 *           с передачей **access_token**
 * @property occupation информация о текущем роде занятия пользователя
 * @property nickname никнейм (отчество) пользователя
 * @property relatives список родственников текущего пользователя
 * @property relation
 *           Семейное положение пользователя:
 *           1 — не женат/не замужем;
 *           2 — есть друг/есть подруга;
 *           3 — помолвлен/помолвлена;
 *           4 — женат/замужем;
 *           5 — всё сложно;
 *           6 — в активном поиске;
 *           7 — влюблён/влюблена;
 *           0 — не указано
 * @property relationPartner партнер, указанный в семейном положении пользователя
 * @property personal информация о полях из раздела «Жизненная позиция»
 * @property skype **Skype** пользователя
 * @property facebook **Facebook** пользователя
 * @property twitter **Twitter** пользователя
 * @property livejournal **Livejournal** пользователя
 * @property instagram **Instagram** пользователя
 * @property exports
 *           Внешние сервисы,
 *           в которые настроен экспорт из ВК (*twitter*, *facebook*, *livejournal*, *instagram*)
 * @property wallComments доступно ли комментирование стены (*1* — доступно, *0* — недоступно)
 * @property activities деятельность
 * @property interests интересы
 * @property music любимая музыка
 * @property movies любимые фильмы
 * @property tv любимые телешоу
 * @property books любимые книги
 * @property games любимые игры
 * @property about «О себе»
 * @property quotes любимые цитаты
 * @property canPost
 *           Информация о том, разрешено ли оставлять записи на стене у пользователя.
 *           Возвращаемые значения: *1* —разрешено, *0* — не разрешено
 * @property canSeeAllPosts
 *           Информация о том, разрешено ли видеть чужие записи на стене пользователя.
 *           Возвращаемые значения: *1* —разрешено, *0* — не разрешено
 * @property canSeeAudio
 *           Информация о том, разрешено ли видеть чужие аудиозаписи на стене пользователя.
 *           Возвращаемые значения: *1* —разрешено, *0* — не разрешено
 * @property canWritePrivateMessage
 *           Информация о том, разрешено ли написание личных сообщений данному пользователю.
 *           Возвращаемые значения: *1* —разрешено, *0* — не разрешено
 * @property canSendFriendRequest
 *           Информация о том, будет ли отправлено уведомление пользователю о заявке в друзья.
 *           Возвращаемые значения: *1* — уведомление будет отправлено, *0* — уведомление не будет оптравлено
 * @property isFavorite возвращается *1*, если пользователь находится в закладках у текущего пользователя
 * @property isHiddenFromFeed возвращается *1*, если пользователь скрыт в новостях у текущего пользователя
 * @property timezone временная зона пользователя. Возвращается только при запросе информации о текущем пользователе
 * @property screenName короткое имя (поддомен) страницы пользователя
 * @property maidenName девичья фамилия
 * @property cropPhoto возвращает данные о точках, по которым вырезаны профильная и миниатюрная фотографии пользователя
 * @property isFriend *1* – пользователь друг, *2* – пользователь не в друзьях
 * @property friendStatus
 *           Статус дружбы с пользователем:
 *           0 – пользователь не является другом;
 *           1 – отправлена заявка/подписка пользователю;
 *           2 – имеется входящая заявка/подписка от пользователя;
 *           3 – пользователь является другом
 * @property career информация о карьере пользователя
 * @property military информация о военной службе пользователя
 * @property blacklisted
 *           Возвращается 1, если текущий пользователь находится в
 *           черном списке у запрашиваемого пользователя
 * @property blacklistedByMe
 *           Возвращается 1, если запрашиваемый пользователь находится в
 *           черном списке у текущего пользователя
 */
@JsonIgnoreProperties(ignoreUnknown = true)
data class Profile(
        val id: Int = 0,
        @JsonProperty("first_name")
        val firstName: String = "",
        @JsonProperty("last_name")
        val lastName: String = "",
        val deactivated: Deactivated? = null,
        val hidden: Boolean? = null,
        @JsonProperty("photo_id")
        val photoId: String? = null,
        @JsonProperty("verified")
        val verified: Boolean? = null,
        val sex: Int? = null,
        val bdate: String? = null,
        val city: City? = null,
        val country: Country? = null,
        @JsonProperty("home_town")
        val homeTown: String? = null,
        @JsonProperty("has_photo")
        val hasPhoto: Boolean? = null,
        @JsonProperty("photo_50")
        val photo50: String? = null,
        @JsonProperty("photo_100")
        val photo100: String? = null,
        @JsonProperty("photo_200_orig")
        val photo200orig: String? = null,
        @JsonProperty("photo_200")
        val photo200: String? = null,
        @JsonProperty("photo_400_orig")
        val photo400orig: String? = null,
        @JsonProperty("photo_max")
        val photoMax: String? = null,
        @JsonProperty("photo_max_orig")
        val photoMaxOrig: String? = null,
        val online: Boolean? = null,
        val lists: String? = null,
        val domain: String? = null,
        @JsonProperty("has_mobile")
        val hasMobile: Boolean? = null,
        @JsonProperty("mobile_phone")
        val mobilePhone: String? = null,
        @JsonProperty("home_phone")
        val homePhone: String? = null,
        val site: String? = null,
        val education: Education? = null,
        val universities: List? = null,
        val schools: List? = null,
        val status: String? = null,
        @JsonProperty("status_audio")
        val statusAudio: String? = null,
        @JsonProperty("last_seen")
        val lastSeen: LastSeen? = null,
        @JsonProperty("followers_count")
        val followersCount: Int? = null,
        @JsonProperty("common_count")
        val commonCount: Int? = null,
        val counters: Counters? = null,
        val occupation: Occupation? = null,
        val nickname: String? = null,
        val relatives: List? = null,
        val relation: Int? = null,
        @JsonProperty("relation_partner")
        val relationPartner: RelationPartner? = null,
        val personal: Personal? = null,
        val skype: String? = null,
        val facebook: String? = null,
        val twitter: String? = null,
        val livejournal: String? = null,
        val instagram: String? = null,
        val exports: Any? = null, //FIXME разобраться с форматом
        @JsonProperty("wall_comments")
        val wallComments: Int? = null,
        val activities: String? = null,
        val interests: String? = null,
        val music: String? = null,
        val movies: String? = null,
        val tv: String? = null,
        val books: String? = null,
        val games: String? = null,
        val about: String? = null,
        val quotes: String? = null,
        @JsonProperty("can_post")
        val canPost: Boolean? = null,
        @JsonProperty("can_see_all_posts")
        val canSeeAllPosts: Boolean? = null,
        @JsonProperty("canSeeAudio")
        val canSeeAudio: Boolean? = null,
        @JsonProperty("can_write_private_message")
        val canWritePrivateMessage: Boolean? = null,
        @JsonProperty("can_send_friend_request")
        val canSendFriendRequest: Boolean? = null,
        @JsonProperty("is_favorite")
        val isFavorite: Boolean? = null,
        @JsonProperty("is_hidden_from_feed")
        val isHiddenFromFeed: Boolean? = null,
        val timezone: Int? = null,
        @JsonProperty("screen_name")
        val screenName: String? = null,
        @JsonProperty("maiden_name")
        val maidenName: String? = null,
        @JsonProperty("crop_photo")
        val cropPhoto: CropPhoto? = null,
        @JsonProperty("is_friend")
        val isFriend: Boolean? = null,
        @JsonProperty("friend_status")
        val friendStatus: Int? = null,
        val career: List? = null,
        val military: Military? = null,
        val blacklisted: Boolean? = null,
        @JsonProperty("blacklisted_by_me")
        val blacklistedByMe: Boolean? = null
) {
    /**
     * @property DELETED страница пользователя удалена
     * @property BANNED страница пользователя заблокирована
     */
    enum class Deactivated {
        @JsonProperty("deleted")
        DELETED,
        @JsonProperty("banned")
        BANNED
    }

    /**
     * @property id
     *           Идентификатор города, который можно использовать для получения
     *           его названия с помощью метода [database.getCitiesById]
     * @property title название города
     */
    data class City(
            val id: Int,
            val title: String
    )

    /**
     * @property id
     *           Идентификатор страны, который можно использовать для получения
     *           ее названия с помощью метода [database.getCountriesById]
     * @property title название страны
     */
    data class Country(
            val id: Int,
            val title: String
    )

    /**
     * @property university идентификатор университета
     * @property universityName название университета
     * @property faculty идентификатор факультета
     * @property facultyName название факультета
     * @property graduation год окончания
     */
    data class Education (
            val university: Int,
            @JsonProperty("university_name")
            val universityName: String,
            val faculty: Int,
            @JsonProperty("faculty_name")
            val facultyName: String,
            val graduation: Int
    )

    /**
     * @property id идентификатор университета
     * @property country идентификатор страны, в которой расположен университет
     * @property city идентификатор города, в котором расположен университет
     * @property name наименование университета
     * @property faculty идентификатор факультета
     * @property facultyName наименование факультета
     * @property chair идентификатор кафедры
     * @property chairName наименование кафедры
     * @property graduation год окончания обучения
     */
    data class University (
            val id: Int,
            val country: Int,
            val city: Int,
            val name: String,
            val faculty: Int,
            @JsonProperty("faculty_name")
            val facultyName: String,
            val chair: Int,
            @JsonProperty("chair_name")
            val chairName: String,
            val graduation: Int
    )

    /**
     * @property id идентификатор школы
     * @property country идентификатор страны, в которой расположена школа
     * @property city идентификатор города, в котором расположена школа
     * @property name наименование школы
     * @property yearFrom год начала обучения
     * @property yearTo год окончания обучения
     * @property yearGraduated год выпуска
     * @property classLetter буква класса
     * @property speciality специализация
     * @property type идентификатор типа
     * @property typeStr название типа
     *
     * Возможные значения для пар **type-typeStr**:
     * 0 - "школа", 1 - "гимназия", 2 - "лицей", 3 - "школа-интернат", 4 - "школа вечерняя",
     * 5 - "школа музыкальная", 6 - "школа спортивная", 7 - "школа художественная", 8 - "колледж",
     * 9 - "профессиональный лицей", 10 - "техникум", 11 - "ПТУ", 12 - "училище", 13 - "школа искусств"
     */
    data class School (
            val id: String,
            val country: Int,
            val city: Int,
            val name: String,
            @JsonProperty("year_from")
            val yearFrom: Int,
            @JsonProperty("year_to")
            val yearTo: Int,
            @JsonProperty("year_graduated")
            val yearGraduated: Int,
            @JsonProperty("class")
            val classLetter: String,
            val speciality: String,
            val type: Int,
            @JsonProperty("type_str")
            val typeStr: String
    )

    /**
     * @property time время последнего посещения в формате **unixtime**
     * @property platform
     *           Тип платформы, через которую был осуществлён последний вход.
     *           Подробнее смотрите на странице
     *           Подключение к LongPoll серверу
     */
    data class LastSeen(
            @JsonDeserialize(using = UnixTimestampDeserializer::class)
            val time: Timestamp,
            val platform: Int
    )

    /**
     * @property albums количество фотоальбомов
     * @property videos количество видеозаписей
     * @property audios количество аудиозаписей
     * @property photos количество фотографий
     * @property notes количество заметок
     * @property friends количество друзей
     * @property groups количество сообществ
     * @property onlineFriends количество друзей онлайн
     * @property mutualFriends количество общих друзей
     * @property userVideos количество видеозаписей с пользователем
     * @property followers количество подписчиков
     * @property pages количество объектов в блоке «Интересные страницы»
     */
    data class Counters(
            val albums: Int,
            val videos: Int,
            val audios: Int,
            val photos: Int,
            val notes: Int,
            val friends: Int,
            val groups: Int,
            @JsonProperty("online_friends")
            val onlineFriends: Int,
            @JsonProperty("mutual_friends")
            val mutualFriends: Int,
            @JsonProperty("user_videos")
            val userVideos: Int,
            val followers: Int,
            val pages: Int
    )

    /**
     * @property type тип занятия
     * @property id идентификатор школы, вуза, группы компании (в которой пользователь работает)
     * @property name название школы, вуза или места работы
     */
    data class Occupation(
            val type: Type,
            val id: Int,
            val name: String
    ) {
        enum class Type {
            @JsonProperty("work")
            WORK,
            @JsonProperty("school")
            SCHOOL,
            @JsonProperty("university")
            UNIVERSITY
        }
    }

    /**
     * @property id идентификатор пользователя Вконтакте, являющегося родственником
     * @property name когда родственник не является пользователем ВКонтакте (вместо [id])
     * @property type тип родственных связей
     */
    data class Relatives(
            val id: Int,
            val name: String,
            val type: Type
    ) {
        /**
         * @property SIBLING брат/сестра
         * @property PARENT родитель
         * @property CHILD ребенок
         * @property GRANDPARENT дедушка/бабушка
         * @property GRANDCHILD внук
         */
        enum class Type {
            @JsonProperty("sibling")
            SIBLING,
            @JsonProperty("parent")
            PARENT,
            @JsonProperty("child")
            CHILD,
            @JsonProperty("grandparent")
            GRANDPARENT,
            @JsonProperty("grandchild")
            GRANDCHILD
        }
    }

    /**
     * @property id идентификатор пользователя Вконтакте, являющегося партнером
     * @property name имя партнера
     */
    data class RelationPartner(
            val id: Int,
            val name: String
    )

    /**
     * @property political:
     *           Политические предпочтения
     *           1 — коммунистические;
     *           2 — социалистические;
     *           3 — умеренные;
     *           4 — либеральные;
     *           5 — консервативные;
     *           6 — монархические;
     *           7 — ультраконсервативные;
     *           8 — индифферентные;
     *           9 — либертарианские
     * @property langs языки
     * @property religion мировоззрение
     * @property inspiredBy источники вдохновения
     * @property peopleMain
     *           Главное в людях:
     *           1 — ум и креативность;
     *           2 — доброта и честность;
     *           3 — красота и здоровье;
     *           4 — власть и богатство;
     *           5 — смелость и упорство;
     *           6 — юмор и жизнелюбие
     * @property lifeMain
     *           Главное в жизни:
     *           1 — семья и дети;
     *           2 — карьера и деньги;
     *           3 — развлечения и отдых;
     *           4 — наука и исследования;
     *           5 — совершенствование мира;
     *           6 — саморазвитие;
     *           7 — красота и искусство;
     *           8 — слава и влияние;
     * @property smoking
     *           Отношение к курению:
     *           1 — резко негативное;
     *           2 — негативное;
     *           3 — нейтральное;
     *           4 — компромиссное;
     *           5 — положительное
     * @property alcohol
     *           Отношение к алкоголю:
     *           1 — резко негативное;
     *           2 — негативное;
     *           3 — нейтральное;
     *           4 — компромиссное;
     *           5 — положительное
     */
    data class Personal(
            val political: Int,
            val langs: List,
            val religion: String,
            @JsonProperty("inspired_by")
            val inspiredBy: String,
            @JsonProperty("people_main")
            val peopleMain: Int,
            @JsonProperty("life_main")
            val lifeMain: Int,
            val smoking: Int,
            val alcohol: Int
    )

    /**
     * @property photo объект [Photo] фотографии пользователя из которой вырезается профильная аватарка
     * @property crop вырезанная фотография пользователя, координаты указаны в процентах
     * @property rect миниатюрная квадратная фотография, вырезанная из фотографии [crop], координаты указаны в процентах
     */
    data class CropPhoto(
            val photo: Photo,
            val crop: Coordinates,
            val rect: Coordinates
    ) {
        data class Coordinates(
                val x: Float,
                val y: Float,
                val x2: Float,
                val y2: Float
        )
    }

    /**
     * @property groupId идентификатор сообщества (если доступно, иначе [company])
     * @property company название организации (если доступно, иначе [groupId])
     * @property countryId идентификатор страны
     * @property cityId идентификатор города (если доступно, иначе [cityName])
     * @property cityName название города (если доступно, иначе [cityId])
     * @property from год начала работы
     * @property until год окончания работы
     * @property position должность
     */
    data class Career(
            @JsonProperty("group_id")
            val groupId: Int,
            val company: String,
            @JsonProperty("country_id")
            val countryId: Int,
            @JsonProperty("city_id")
            val cityId: Int,
            @JsonProperty("city_name")
            val cityName: String,
            val from: Int,
            val until: Int,
            val position: String
    )

    /**
     * @property unit номер части
     * @property unitId идентификатор части в базе данных
     * @property countryId идентификатор страны, в которой находится часть
     * @property from год начала службы
     * @property unit год окончания службы
     */
    data class Military(
            val unit: Int,
            @JsonProperty("unit_id")
            val unitId: Int,
            @JsonProperty("country_id")
            val countryId: Int,
            val from: Int,
            val until: Int
    )
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy