# Video API
[](https://travis-ci.com/whitecodelabs/video-message-backend)
## Development
`.env` variables.
```
AUTH0_JWKS_URI=https://dev-c4iga5kc.us.auth0.com/.well-known/jwks.json
AUTH0_AUDIENCE=https://www.vshare-api.com
AUTH0_ISSUER=https://dev-c4iga5kc.us.auth0.com/
AUTH0_EMAIL=https://api.getUser.com/email
AUTH0_NAME=https://api.getUser.com/name
AUTH0_PICTURE=https://api.getUser.com/picture
BASE_URL=http://localhost:5000
VIDEO_SERVER_URL=http://localhost:3000
MONGO_SECRET=somesecretekeyhere
MONGO_URL=mongodb+srv://admin:AUsdEsW65SCy6fV3@cluster0.uqd8m.mongodb.net/video-messaging?retryWrites=true&w=majority
AWS_ACCESS_KEY_ID=<aws access id>
AWS_SECRET_ACCESS_KEY=<aws secret>
S3_BUCKET=wcdlbs
```
## **Create Video**
- **URL**
`/api/v0/video/create`
- **Method:**
`POST`
- **Data Params**
Body must contain video_title as `title`, video_description as `description`and videoId as `videoId`.
- **Required:**
`title=[text]`
`description=[text]`
`videoId=[alphanumeric]`
- **Success Response:**
**Code:** 200 <br />
**Content:** `{ video : ef19ba00-18ab-411c-9360-e9c8f69eddb8 }`
- **Error Response:**
**Code:** 401 UNAUTHORIZED <br />
**Content:** `{ error : "No authorization token was found" }`
- **Sample Call:**
```
axios.post('/uploadToMongo', {
body: {
title: "any_title",
description: "any_description",
videoId: "ef19ba00-18ab-411c-9360-e9c8f69eddb8"
},
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
## **Get Video Information**
- **URL**
`/api/v0/video/getVideo/:videoId`
- **Method:**
`GET`
- **URL Params**
url must contain a parameter as `videoId`
- **Required:**
`videoId=[alphanumeric]`
- **Success Response:**
**Code:** 200 <br />
**Content:** `{_id: videoId, title: video_title, ... }`
- **Error Response:**
**Code:** 401 UNAUTHORIZED <br />
**Content:** `{ error : "No authorization token was found" }`
- **Sample Call:**
```
axios.post('/video/ef19ba00-18ab-411c-9360-e9c8f69eddb8', {
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
## **Set Video Share Permission**
- **URL**
`/updateVideoPrivacy`
- **Method:**
`POST`
- **Data Params**
Body must contain shareType as `shareType`, participantEmail as `email`and videoId as `videoId`.
- **Required:**
`shareType=[public/private]`
`videoId=[alphanumeric]`
- **Success Response:**
**Code:** 200 <br />
**Content:** `{video privacy updated}`
- **Error Response:**
**Code:** 401 UNAUTHORIZED <br />
**Content:** `{ error : "No authorization token was found" }`
- **Sample Call:**
```
axios.post('/updateShareInfo', {
body: {
email: "email@email.com",
shareType: "private",
videoId: "ef19ba00-18ab-411c-9360-e9c8f69eddb8"
},
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
## **Allow/Disallow Users for watch permission**
- **URL**
`/updateVideoUsers`
- **Method:**
`POST`
- **Data Params**
Body must contain participantEmail as `email` and videoId as `videoId`.
- **Required:**
`email=[email@email.com]`
`videoId=[alphanumeric]`
- **Success Response:**
**Code:** 200 <br />
**Content:** `{ user allowed/user disallowed }`
- **Error Response:**
**Code:** 401 UNAUTHORIZED <br />
**Content:** `{ error : "No authorization token was found" }`
- **Sample Call:**
```
axios.post('/disallowUser', {
body: {
email: "email@email.com",
videoId: "ef19ba00-18ab-411c-9360-e9c8f69eddb8"
},
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
## **Delete Video**
- **URL**
`/api/v0/video/deleteVideo`
- **Method:**
`POST`
- **Data Params**
Body must contain videoId as `videoId`.
- **Required:**
`videoId=[alphanumeric]`
- **Success Response:**
**Code:** 200 <br />
**Content:** `{ video deleted successfully }`
- **Error Response:**
**Code:** 401 UNAUTHORIZED <br />
**Content:** `{ error : "No authorization token was found" }`
- **Sample Call:**
```
axios.post('/deleteVideo', {
body: {
videoId: "ef19ba00-18ab-411c-9360-e9c8f69eddb8"
},
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
# Group API
## Group Schema
```
Group: {
Name: String,
Description: String,
ImgURl: String,
Creator: String,
Members: [Member],
Videos: [Ref. Videos]
}
```
- **Member**
```
Member: {
RoleID: [creator/admin/member];
UserID: [Ref. User]
}
```
## **Create Group**
- **URL**
`/api/v0/group/create`
- **Method:**
`POST`
- **Data Params**
Body must contain group_name as `name` and group_description as `description`.
- **Required:**
`name=[text]`
`description=[text]`
- **Success Response:**
**Code:** 200 <br />
**Content:** `{ groupCreated : {name: string, description: string ... } }`
- **Error Response:**
**Code:** 404 UNAUTHORIZED <br />
**Content:** `{ error : "User Not Found" }`
- **Sample Call:**
```
axios.post('/api/v0/group/create', {
body: {
name: "any_name",
description: "any_description",
},
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
## **Get group information**
- **URL**
`/api/v0/group/[:groupId]/get`
- **Method:**
`GET`
- **URL Params**
`groupId: [alphanumeric]`
- **Required:**
`groupId: [alphanumeric]`
- **Success Response:**
**Code:** 200 <br />
**Content:** ` {group: {name: string, description: string ... } }`
- **Error Response:**
**Code:** 404 NO_DATA_FOUND <br />
**Content:** `{ error : "No data found" }`
- **Sample Call:**
```
axios.get('/api/v0/group/[:groupId]/get', {
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
## **Group update**
- **URL**
`/api/v0/group/[:groupId]/update`
- **Method:**
`POST`
- **URL Params**
`groupId: [alphanumeric]`
- **Data Params**
Body should contain group_name as `name` and group_description `description`.
- **Required:**
`name: [text]`
`description: [text]`
- **Success Response:**
**Code:** 200 <br />
**Content:** ` {success: "success" }`
- **Error Response:**
**Code:** 404 NO_DATA_FOUND <br />
**Content:** `{ error : "No data found" }`
- **Sample Call:**
```
axios.post('/api/v0/group/[:groupId]/update', {
body: {
name: "group_new_name",
description: "group_new_description"
},
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
## **Share video to group**
- **URL**
`/api/v0/group/[:groupId]/share`
- **Method:**
`POST`
- **URL Params**
`groupId: [alphanumeric]`
- **Data Params**
Body must contain `videoId` to share.
- **Required:**
`videoId: [alphanumeric]`
- **Success Response:**
**Code:** 200 <br />
**Content:** `{ success: "video sent to the group" }`
- **Error Response:**
**Code:** 404 NO_DATA_FOUND <br />
**Content:** `{ error : "No data found" }`
- **Sample Call:**
```
axios.post('/api/v0/group/[:groupId]/share', {
body: {
videoId: "60d0abe3190f9a4340cdd39c"
},
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
## **Invite members to group**
- **URL**
`/api/v0/group/[:groupId]/invite`
- **Method:**
`POST`
- **URL Params**
`groupId: [alphanumeric]`
- **Data Params**
Body must contain an array of users to invite.
- **Required:**
```
[
{
email: string,
role: string,
},
{
email: string,
role: string,
}
]
```
- **Success Response:**
**Code:** 200 <br />
**Content:** `{ successs : "Users Invited Successfully" }`
- **Error Response:**
**Code:** 404 NO_DATA_FOUND <br />
**Content:** `{ error : "No data found" }`
- **Sample Call:**
```
axios.post('/api/v0/group/[:groupId]/invite', {
body: {
addUsers: [user_array]
},
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
## **Remove group member (admin/member)**
- **URL**
`/api/v0/group/[:groupId]/kick`
- **Method:**
`POST`
- **URL Params**
`groupId: [alphanumeric]`
- **Data Params**
Body must contain an array of users to remove.
- **Required:**
```
[
{
email: string
},
{
email: string
}
]
```
- **Success Response:**
**Code:** 200 <br />
**Content:** `{ successs : "Users/User kicked Successfully" }`
- **Error Response:**
**Code:** 404 NO_DATA_FOUND <br />
**Content:** `{ error : "No data found" }`
- **Sample Call:**
```
axios.post('/api/v0/group/[:groupId]/kick', {
body: {
addUsers: [user_array]
},
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
## **Delete group**
- **URL**
`/api/v0/group/[:groupId]/delete`
- **Method:**
`POST`
- **URL Params**
`groupId: [alphanumeric]`
- **Required:**
`groupId: [alphanumeric]`
- **Success Response:**
**Code:** 200 <br />
**Content:** `{ success: "Group Deleted successfully" }`
- **Error Response:**
**Code:** 404 NO_DATA_FOUND <br />
**Content:** `{ error : "No data found" }`
- **Sample Call:**
```
axios.post('/api/v0/group/[:groupId]/delete', {
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
# Video Converting API
## **Generate Adaptive Resolution**
- **URL**
`/transcode`
- **Method:**
`POST`
- **Data Params**
Body must contain video_file as `file` and socketId as `randomId`.
- **Required:**
`file=[file]`
`randomId=[alphanumeric]`
- **Success Response:**
**Code:** 200 <br />
**Content:** `{ video : [alphanumeric] }`
- **Sample Call:**
```
axios.post('/transcode', {
body: {
file: video.mp4,
randomId: xi7s87x,
},
headers: {'Authorization': 'Bearer <token>'},
})
.then(function (response) {
console.log(response);
})
```
# Socket Server
## Connect to Socker Server
import { io } from "socket.io-client";
import randomString from "randomstring";
const socket = io("https://vcsock.diplay.app");
var randId = randomString.generate(7);
const connectUser = () => { return socket.emit("userConnected", randId);};
socket.on("connect", connectUser);
## Socket Events
- ## Get Dolby Processing Progress
socket.on("dolbyProgress", (progress) => {console.log(progress)});
- ## Get Video Converting Progress
socket.on("getProgress", (progress) => {console.log(progress)});
- ## Get Upload Video Progress
socket.on("getPercentage", (progress) => {console.log(progress)});
## Setup Swagger Documentation
- **Create Swagger Account on https://swagger.io/**
- **Create New API Documentation**
- **Replace all the pre-written text with the swagger_specification.txt**
- **Add Authentication Token on the Swagger Platform**
- **Try Executing the queries and see results in realtime**