Blinck-Server
Blinck backend based on spring boot.
High quality code with 70-80% test coverage.
{
"facebook_uid" : " " ,
"facebook_token" : " "
}
{
"user_id" : " " ,
"password" : " "
}
HTTP Authorization header:
Authorization: JWT String
Endpoint
Method
Body
Response
/login/user
POST
User JSON
HTTP Authorization header
Login as user (register automaticaly)
/login/admin
POST
Admin JSON
HTTP Authorization header
Login as admin
/protected/admin/registration
POST
Admin JSON
200
Register new admin
Connection header:
User: Long
Authorization: JWT String
Endpoint
Method
Connection header
HTTP Authorization Header
/stomp
CONNECT
YES
YES
Connect to server via jwt
Endpoint
Method
Response
/public/about
GET
String
Get application info
/public/facebook/permissions
GET
String[]
Get required facebook permission
/rel/res/public/images/{resource}
GET
byte[]
Get image resource
{
"principal" : String,
"active" : Boolean
}
Endpoint
Method
Authorization
Response
/session/user
GET
USER
StatusResponse JSON
Get user authorization info
/session/admin
GET
ADMIN
StatusResponse JSON
Get admin authorization info
/session/user/logout
GET, POST
USER
String
Logout user
/session/admin/logout
GET, POST
ADMIN
String
Logout admin
{
"userName" : {
"firstName" : String,
"secondName" : String,
"lastName" : String,
"nickname" : String
},
"gender" : String,
"about" : String,
"birthday" : Long
}
{
"photo" : {
"avatar" : String,
"photos" : String
}
}
{
"id" : Long,
"user" : {
"firstName" : String,
"secondName" : String,
"lastName" : String,
"nickname" : String
}
}
Endpoint
Method
Arguments
Response
/protected/user/profile/bio
GET
Long: id
BioEntity
Get user bio
/protected/user/profile/media
GET
Long: id
MediaEntity
Get user media
/protected/user/profile/priv
GET
NONE
PrivateProfile
Get user private profile
/protected/user/profile/find/one
GET
String: username
BioEntity
Find user profile
/protected/user/profile/find
GET
String: username Int: page, size
NameDetails[]
Find user profiles
/protected/user/profile/update/bio
POST
BODY: BioEntity
Boolean
Update user bio
/protected/user/profile/update/nickname
POST
BODY: String
Boolean
Update username
/protected/user/profile/update/priv
POST
BODY: PrivateProfile
Boolean
Update private profile
{
"position" : Integer,
"image" : String
}
Endpoint
Method
Arguments
Response
/protected/user/media/image/max
GET
NONE
Integer
Get max numb of images
/protected/user/media/image/list
GET
Long: id
UserImageInfo[]
Get user images
/protected/user/media/image/avatar
GET
Long: id
String
Get user avatar
/protected/user/media/image/swap
POST, GET
Int: one, two
200
Swap user images
/protected/user/media/image/delete
DELETE, POST
Int: image
200
Delete user image
/protected/user/media/image/add
POST
File: image
200
Add user image
/protected/user/media/image/set
POST
File: image Int: index
200
Set user image
/protected/user/media/image/avatar
POST
File: image
200
Set user avatar
Endpoint
Method
Arguments
Response
/protected/user/report
POST
Long: id String: reason
Boolean
Report user, reason might be null
{
"id" : Long,
"type" : String,
"info" : String,
"timestamp" : Long
}
Endpoint
Method
Arguments
Response
/protected/user/notifications/count
GET
NONE
Long
Get notifications count
/protected/user/notifications/list
GET
Int: page, size
NotificationForm[]
Get notifications
/protected/user/notifications/list/all
GET
NONE
NotificationForm[]
Get all notifications
/protected/user/notifications/list/all/pop
GET
NONE
NotificationForm[]
Pop all notifications
/protected/user/notifications/last
GET
NONE
NotificationForm
Get last notification
/protected/user/notifications/remove
DELETE, POST, GET
Long: id
200
Remove notification
/protected/user/notifications/remove
DELETE, POST, GET
NONE
200
Remove all notification
Endpoint
Method
Response
/user/queue/notification
SUBSCRIBE
NotificationForm
Receive user notificaions instantly
Type
Value
FRIEND_MESSAGE_STOMP
"friendship_message_stomp"
FRIEND_MESSAGE_REST
"friendship_message_rest"
FRIEND_REQUEST
"friendship_request"
FRIEND_ACCEPTED
"friendship_accepted"
FRIEND_DECLINED
"friendship_declined"
FRIEND_DELETED
"friendship_deleted"
CUSTOM_SUB_PARTY_REMOVE
"custom_sub_party_removed"
CUSTOM_SUB_PARTY_JOIN
"custom_sub_party_joined"
CUSTOM_SUB_PARTY_INVITE
"custom_sub_party_invite"
CUSTOM_SUB_PARTY_LEAVE
"custom_sub_party_leave"
SUB_PARTY_MESSAGE_STOMP
"sub_party_message_stomp"
SUB_PARTY_MESSAGE_REST
"sub_party_message_rest"
SUB_PARTY_FOUND
"sub_party_found"
SUB_PARTY_IN_QUEUE
"sub_party_in_queue"
PARTY_MESSAGE_STOMP
"party_message_stomp"
PARTY_MESSAGE_REST
"party_message_rest"
PARTY_FOUND
"party_found"
PARTY_MEETING_SET
"party_meeting_set"
PARTY_MEETING_PROPOSITION
"party_meeting_proposition"
PARTY_MEETING_VOTE
"party_meeting_vote"
PARTY_MEETING_VOTE_FINAL
"party_meeting_vote_final"
PARTY_MEETING_VOTE_FINAL_FAIL
"party_meeting_vote_final_fail"
PARTY_MEETING_VOTE_FINAL_SUCCESS
"party_meeting_vote_final_success"
QUEUE_LEAVE
"queue_leave"
{
"ident" : Gender,
"wanted" : Gender,
"dimension" : Dimension,
"ages" : String
}
Dimension
Value
1x1
1
2x2
2
3x3
3
5x5
5
Gender
Value
MALE
"male"
FEMALE
"female"
BOTH
"both"
Endpoint
Method
Arguments
Response
/protected/user/match/queue/solo
POST
BODY: TypeForm
200
Enter to solo queue
/protected/user/match/queue/list
GET
NONE
Long[]
Get id's of user rooms in queue
/protected/user/match/queue/leave
POST, DELETE
Long: id
200
Leave room in queue
/protected/user/match/queue/custom
POST
BODY: TypeForm
Long
Create cutom room and returns its ID
/protected/user/match/queue/custom/delete
DELETE
Long: id
Boolean
Delete cutom room
/protected/user/match/queue/custom/list
GET
NONE
Long[]
Get id's of users custom rooms
/protected/user/match/queue/custom/join
POST
Long: id
Boolean
Join to custom room
/protected/user/match/queue/custom/invite
POST
Long: id BODY: Long[]
Boolean
Invite users to room
/protected/user/match/queue/custom/leave
POST, DELETE
Long: id
Boolean
Leave custom room
/protected/user/match/queue/custom/start
POST
Long: id
Boolean
Move custom room to queue
{
"friendship" : Long,
"timestamp" : Long,
"user_1" : Long,
"user_2" : Long
}
{
"friendship" : Long,
"friend" : Long
}
FriendshipNotification JSON:
{
"notification" : Long,
"from" : Long,
"to" : Long,
"timestamp" : Long
}
Endpoint
Method
Arguments
Response
/protected/user/friends/count
GET
NONE
Long
Get friends count
/protected/user/friends/list
GET
Int: page, size
Long[]
Get friends ID list
/protected/user/friends/detailed
GET
Long: id
Friendship
Get friendship
/protected/user/friends/add
POST, GET
Long: user_id
200
Add friend
/protected/user/friends/remove
DELETE, POST, GET
Long: user_id
200
Delete user
/protected/user/friends/request/accept
POST, GET
Long: user_id
200
Accept friend request
/protected/user/friends/request/decline
POST, GET
Long: user_id
200
Decline friend request
/protected/user/friends/request/direct/delete
DELETE, POST, GET
Long: id
200
Delete friend request
/protected/user/friends/request/list/income
GET
Int: page, size
FriendshipNotification[]
Get friend requests
/protected/user/friends/request/list/outcome
GET
Int: page, size
FriendshipNotification[]
Get own friend requests
{
"topic" : Long,
"author" : Long,
"message" : String,
"timestamp" : Long
}
Endpoint
Method
Arguments
Response
/protected/user/friends/conversation/messages/count
GET
Long: id
Long
Count messages
/protected/user/friends/conversation/messages/list
GET
Long: id Int: page, size
MessageForm[]
Get messages
/protected/user/friends/conversation/messages/last
GET
Long: id
MessageForm
Get last message
/protected/user/friends/conversation/messages/send
POST
BODY: MessageForm
200
Send message
/protected/user/friends/conversation/remove
DELETE
Long: id
200
Delete conversation
{
"destination" : String,
"timestamp" : Long,
"status" : Boolean
}
Endpoint
Method
Payload
/user/message/friendship/{friendship_id}
SUBSCRIBE
MessageForm
Receive friendship messages
/user/message/friendship/stat
SUBSCRIBE
StatusForm
Receive status of sended messages
/app/message/friendship
SEND
MessageForm
Send message to friendship
{
"ident" : String,
"wanted" : String,
"dimension" : Integer
}
{
"id" : Long,
"party" : Long,
"type" : {
"ident" : String,
"wanted" : String,
"dimension" : Integer
},
"users" : [ Long ]
}
Endpoint
Method
Arguments
Response
/protected/user/subgroup/details
GET
Long: id
Info
Get subparty info
/protected/user/subgroup/details/group
GET
Long: id
Long
Get parent party id
/protected/user/subgroup/details/type
GET
Long: id
Type
Get subparty type
/protected/user/subgroup/details/users
GET
Long: id
Long[]
Get subparty users id's
/protected/user/subgroup/list/id
GET
NONE
Long[]
Get subparty id list
/protected/user/subgroup/list/details
GET
NONE
Info[]
Get subparty info list
/protected/user/subgroup/leave
DELETE, POST, GET
Long: id
200
Leave subparty (and parent party)
{
"topic" : Long,
"author" : Long,
"message" : String,
"timestamp" : Long
}
Endpoint
Method
Arguments
Response
/protected/user/subgroup/conversation/messages/count
GET
Long: id
Long
Count messages
/protected/user/subgroup/conversation/messages/list
GET
Long: id Int: page, size
MessageForm[]
Get messages
/protected/user/subgroup/conversation/messages/send
POST
BODY: MessageForm
200
Send message
{
"destination" : String,
"timestamp" : Long,
"status" : Boolean
}
Endpoint
Method
Payload
/user/message/subgroup/{subgroup_id}
SUBSCRIBE
MessageForm
Receive subgroup messages
/user/message/subgroup/stat
SUBSCRIBE
StatusForm
Receive status of sended messages
/app/message/subgroup
SEND
MessageForm
Send message to subgroup
{
"id" : Long,
"meeting" : {
"time" : Long,
"active_after" : Long,
"venue" : String
},
"sub_parties" : [ Long ],
"users" : [ Long ]
}
{
"time" : Long,
"active_after" : Long,
"venue" : String
}
Endpoint
Method
Arguments
Response
/protected/user/group/details
GET
Long: id
PartyInfo
Get party info
/protected/user/group/details/meeting
GET
Long: id
Meeting
Get party meeting
/protected/user/group/details/user
GET
Long: id
Long[]
Get party users id's
/protected/user/group/details/isactive
GET
Long: id
Boolean
Get party status
/protected/user/group/list/id
GET
NONE
Long[]
Get parties id list
/protected/user/group/list/details
GET
NONE
PartyInfo[]
Get parties info list
{
"id" : Long,
"votes" : Integer,
"offer" : {
"time" : Long,
"active_after" : Long,
"venue" : String
}
}
Endpoint
Method
Arguments
Response
/protected/user/group/meeting/list
GET
Long: id
OfferInfo
Get proposed meeting list
/protected/user/group/meeting/propose
POST
Long: id BODY: Meeting
Boolean
Propose meeting
/protected/user/group/meeting/vote
POST, GET
Long: proposition Boolean: option
200
Vote
/protected/user/group/meeting/vote/final
POST, GET
Long: proposition Boolean: option
200
Vote final
{
"topic" : Long,
"author" : Long,
"message" : String,
"timestamp" : Long
}
Endpoint
Method
Arguments
Response
/protected/user/group/conversation/messages/count
GET
Long: id
Long
Count messages
/protected/user/group/conversation/messages/list
GET
Long: id Int: page, size
MessageForm[]
Get messages
/protected/user/group/conversation/messages/send
POST
BODY: MessageForm
200
Send message
{
"destination" : String,
"timestamp" : Long,
"status" : Boolean
}
Endpoint
Method
Payload
/user/message/group/{group_id}
SUBSCRIBE
MessageForm
Receive party messages
/user/message/group/stat
SUBSCRIBE
StatusForm
Receive status of sended messages
/app/message/group
SEND
MessageForm
Send message to party
{
"receiver_id" : Long,
"type" : String,
"notification" : String
}
Endpoint
Method
Arguments
Response
/protected/admin/list
GET
NONE
String[]
Get admin id's list
/protected/admin/verification
POST, GET
Int: size
String[]
Get admin verification id's list
/protected/admin/activate
POST
BODY: String[]
200
Activate admin profiles
/protected/admin/authority/add
POST, GET
String: name, role
200
Add authority to admin
/protected/admin/authority/remove
POST, GET
String: name, role
200
Remove authority from admin
/protected/admin/authority/session/close
POST, GET
String: name
200
Close user session
/protected/admin/authority/session/admin
POST, GET
String: name
200
Close admin session
/protected/admin/notification/user
POST
BODY: SimpNotification
200
Send notification to user
{
"id" : Long,
"locked" : Boolean,
"authorities" : String
}
{
"id" : Long,
"reason" : String,
"reporter_id" : Long,
"reported_id" : Long
}
Endpoint
Method
Arguments
Response
/protected/admin/bans/count/user
GET
NONE
Long
Get locked users count
/protected/admin/bans/list/user
GET
Int: page, size
UserAuth[]
Get locked users list
/protected/admin/bans/details/user
GET
Long: id
UserAuth
Get locked users
/protected/admin/bans/lock/user
POST, GET
Long: id Boolean: option
200
Lock (or not) user
/protected/admin/bans/reporst/user/count
GET
NONE
Long
Get user reports count
/protected/admin/bans/reporst/user/list
GET
Long: id
ReportList[]
Get user reports list
/protected/admin/bans/reporst/user/list/all
GET
Int: page, size
ReportList[]
Get all users reports
/protected/admin/bans/reporst/user/clear
POST, GET
Long: id
200
Clear user reports history
I'm highly recommend to don't use it.
{
"id" : Long,
"meeting" : {
"time" : Long,
"active_after" : Long,
"venue" : String
},
"subParties" : [ Long ],
"details" : {
"type" : {
"ident" : String,
"wanted" : String,
"dimension" : Integer
},
"inQueue" : Boolean
}
}
{
"id" : Long,
"party" : {
"id" : Long,
"meeting" : {
"time" : Long,
"active_after" : Long,
"venue" : String
},
"subParties" : [ Long ],
"details" : {
"type" : {
"ident" : String,
"wanted" : String,
"dimension" : Integer
},
"inQueue" : Boolean
}
},
"details" : {
"type" : {
"ident" : String,
"wanted" : String,
"dimension" : Integer
},
"inQueue" : Boolean
},
"users" : [ Long ]
}
Endpoint
Method
Arguments
Response
/protected/admin/monitor/party/all
GET
NONE
Party[]
Get all parties
/protected/admin/monitor/subparty/all
GET
NONE
SubParty[]
Get all subparties