Skip to content

Commit

Permalink
first
Browse files Browse the repository at this point in the history
  • Loading branch information
Max-Maxwelll committed May 6, 2020
0 parents commit 55e0624
Show file tree
Hide file tree
Showing 14 changed files with 904 additions and 0 deletions.
51 changes: 51 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
const express = require("express");
const app = express();
const jsonParser = express.json();
const concertController = require("./controllers/concertController");
const trackController = require("./controllers/trackController");
const homeController = require("./controllers/homeController");
const userController = require("./controllers/userController");
const statisticController = require("./controllers/statisticController");

// определяем роутеры
const trackRouter = express.Router();
const concertRouter = express.Router();
const homeRouter = express.Router();
const userRouter = express.Router();
const statisticRouter = express.Router();

app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "*"); // update to match the domain you will make the request from
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
next();
});

userRouter.post("/login", jsonParser, userController.login);
userRouter.post("/register", jsonParser, userController.register);
app.use("/user", userRouter);

trackRouter.post("/create", jsonParser, trackController.create);
trackRouter.get("/delete", trackController.delete);
trackRouter.get("/", trackController.get);
app.use("/tracks", trackRouter);

concertRouter.get("/delete", concertController.delete);
concertRouter.get("/", concertController.get);
app.use("/concerts", concertRouter);

homeRouter.get("/vote", homeController.vote);
homeRouter.get("/stop", homeController.stop);
app.use("/", homeRouter);

statisticRouter.get("/author", statisticController.author);
statisticRouter.get("/genre", statisticController.genre);
statisticRouter.get("/year", statisticController.year);
statisticRouter.get("/album", statisticController.album);
statisticRouter.get("/language", statisticController.language);
app.use("/statistic", statisticRouter);

app.use(function (req, res, next) {
res.status(404).send("Not Found")
});

app.listen(3000);
1 change: 1 addition & 0 deletions client
Submodule client added at a07b09
25 changes: 25 additions & 0 deletions controllers/concertController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
const Concert = require("../models/concert");
const mongoose = require("../modules/mongoose");
exports.delete = function (request, response){
mongoose.connect();
const id = request.query.id;
Concert.findByIdAndDelete(id, function(err){
if(err){
console.log(err);
response.status(400).json('');
}
response.status(200).json('');
});
};
exports.get = function(request, response){
mongoose.connect();
Concert.find({}, function(err, res){
mongoose.disconnect();
if(err){
console.log(err);
response.status(400).json('');
}
// console.log(res);
response.status(200).json(res);
});
};
60 changes: 60 additions & 0 deletions controllers/homeController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
const mongoose = require("../modules/mongoose");
const Track = require("../models/track");
const Concert = require("../models/concert");
exports.vote = function (request, response) {
const id = request.query.id;
const name = request.query.name;
mongoose.connect();

Track.findOne({_id: id, voted: name}, function(error, tracks){
if(error){
console.log(err);
return response.status(400).json("");
}
if(tracks){
return response.status(400).json("");
}
Track.findOneAndUpdate({_id:id}, {$addToSet: {"voted":name}}, function(err){
if(err){
console.log(err);
return response.status(400).json("");
}
});
Track.findOneAndUpdate({_id:id}, {$inc: {"votes": 1}}, function(err){
if(err){
console.log(err);
return response.status(400).json("");
}
});
return response.status(200).json("");
});


};
exports.stop = function(request, response) {
mongoose.connect();

Track.find({}).sort({votes: -1})
.limit(3)
.exec(function(err, res){
if(err){
return response.status(400).send('');
}

const concert = new Concert({tracks: res});
// console.log(concert);
concert.save(function(err){
if(err){
console.log(err);
return response.status(400).send('');
}
});
});
Track.updateMany({}, {$unset: {votes:0, voted: 1}},{multi: true}, function(err){
if(err){
console.log(err);
return response.status(400).send('');
}
});
return response.status(200).send('');
};
57 changes: 57 additions & 0 deletions controllers/statisticController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
const mongoose = require("../modules/mongoose");
const Track = require("../models/track");
exports.author = function(request, response){
mongoose.connect();
Track.aggregate([{ $group: { _id: "$author", count: {$sum: "$votes"}}}]).exec(function(err, res){
if(err){
console.log(err);
return response.status(400).json('');
}
console.log(res);
return response.status(200).json(res);
});
};
exports.genre = function(request, response){
mongoose.connect();
Track.aggregate([{ $group: { _id: "$genre", count: {$sum: "$votes"}}}]).exec(function(err, res){
if(err){
console.log(err);
return response.status(400).json('');
}
console.log(res);
return response.status(200).json(res);
});
};
exports.year = function(request, response){
mongoose.connect();
Track.aggregate([{ $group: { _id: "$year", count: {$sum: "$votes"}}}]).exec(function(err, res){
if(err){
console.log(err);
return response.status(400).json('');
}
console.log(res);
return response.status(200).json(res);
});
};
exports.album = function(request, response){
mongoose.connect();
Track.aggregate([{ $group: { _id: "$album", count: {$sum: "$votes"}}}]).exec(function(err, res){
if(err){
console.log(err);
return response.status(400).json('');
}
console.log(res);
return response.status(200).json(res);
});
};
exports.language = function(request, response){
mongoose.connect();
Track.aggregate([{ $group: { _id: "$language", count: {$sum: "$votes"}}}]).exec(function(err, res){
if(err){
console.log(err);
return response.status(400).json('');
}
console.log(res);
return response.status(200).json(res);
});
};
50 changes: 50 additions & 0 deletions controllers/trackController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
const Track = require("../models/track");
const mongoose = require("../modules/mongoose");
exports.create = function (request, response){
const name = request.body.name;
const author = request.body.author;
const genre = request.body.genre;
const year = request.body.year;
const album = request.body.album;
const language = request.body.language;
const track = new Track({
name: name,
author: author,
genre: genre,
year: year,
album: album,
language: language
});
mongoose.connect();
track.save(function(err){
mongoose.disconnect();
if(err){
console.log(err);
return response.status(400).json('');
}
});
response.status(200).json('');
};
exports.get = function(request, response){
mongoose.connect();
Track.find({}, function(err, tracks){
mongoose.disconnect();
if(err){
console.log(err);
return response.status(400).json('');
}
return response.status(200).json(tracks);
})
};
exports.delete = function(request, response){
const id = request.query.id;
mongoose.connect();
Track.findByIdAndDelete(id, function(err){
mongoose.disconnect();
if(err){
console.log(err);
return response.status(400).json('');
}
return response.status(200).json('');
});
};
44 changes: 44 additions & 0 deletions controllers/userController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const User = require("../models/user.js");
const mongoose = require("../modules/mongoose");
exports.login = function (request, response){
const name = request.body.name;
const password = request.body.password;
mongoose.connect();
User.exists({name: name, password: password}, function(err, res){

mongoose.disconnect();
if(err){
return response.status(400).json("");
}
if(res){
return response.status(200).json("");
}
else{
return response.status(401).json("");
}
});
};
exports.register = function(request, response){
const name = request.body.name;
const password = request.body.password;
mongoose.connect();
User.exists({name: name, password: password}, function(err, res){
if(err){
return response.status(400).json("");
}
if(res){
return response.status(400).json("");
}
});

const user = new User({name: name, password: password})
user.save(function(err){
mongoose.disconnect();
if(err) {
console.log(err);
return response.status(400).json("");
}
console.log("Создан новый пользователь");
});
return response.status(200).json("");
};
11 changes: 11 additions & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
version: '3.4'

services:
mongojs:
image: mongo
container_name: "mongojs"
environment:
- MONGO_DATA_DIR=/data/db
- MONGO_LOG_DIR=/dev/null
ports:
- "3001:27017"
7 changes: 7 additions & 0 deletions models/concert.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const mongoose = require("mongoose");
const Track = require("../models/track");
const Schema = mongoose.Schema;
const concertScheme = new Schema( {
tracks: []
});
module.exports = mongoose.model("Concert", concertScheme);
13 changes: 13 additions & 0 deletions models/track.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const trackScheme = new Schema( {
name: String,
author: String,
genre: String,
year: Number,
album: String,
language: String,
votes: Number,
voted: [String]
});
module.exports = mongoose.model("Track", trackScheme);
7 changes: 7 additions & 0 deletions models/user.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const mongoose = require("mongoose");
const Schema = mongoose.Schema;
const userScheme = new Schema( {
name: String,
password: String
});
module.exports = mongoose.model("User", userScheme);
7 changes: 7 additions & 0 deletions modules/mongoose.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
const mongoose = require("mongoose");
module.exports.connect = function(){
mongoose.connect("mongodb://localhost:3001/sounddb", { useNewUrlParser: true, useUnifiedTopology: false })
};
module.exports.disconnect = function(){
mongoose.disconnect();
};
Loading

0 comments on commit 55e0624

Please sign in to comment.