tirage.js 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. const { Tirage } = require('../models/tirage.model');
  2. const { User } = require('../models/user.model');
  3. const moment = require('moment');
  4. moment().format();
  5. // date de tirage au sort
  6. exports.postDateTirage = async (req, res, next) => {
  7. const tirage = new Tirage({
  8. tirage_date: req.body.date,
  9. });
  10. const valid_date = moment(req.body.date, moment.ISO_8601, true).isValid();
  11. if (req.body.date) {
  12. if (valid_date === true) {
  13. exist_tirage = await Tirage.countDocuments();
  14. if (exist_tirage === 0) {
  15. tirage.save().then(
  16. () => {
  17. res.status(201).json({
  18. success: true,
  19. date: req.body.date,
  20. message: `Date enregistré avec succès`
  21. });
  22. }
  23. ).catch((err) => { res.status(500).json({ success: false, message: err.message }) });
  24. } else {
  25. res.status(400).json({ success: false, message: `La date est déjà définie` });
  26. }
  27. } else {
  28. res.status(400).json({ success: false, message: `Date invalide` });
  29. }
  30. }
  31. else {
  32. res.status(400).json({ success: false, message: `Date introuvable` });
  33. }
  34. };
  35. //tirage au sort
  36. exports.getTirage = async (req, res, next) => {
  37. db_tirage = await Tirage.findOne()
  38. date_now = new Date();
  39. if (db_tirage !== null) {
  40. if (db_tirage.isExecuted === false) {
  41. if (db_tirage.tirage_date && date_now.getFullYear() === new Date(db_tirage.tirage_date).getFullYear()
  42. && date_now.getMonth() === new Date(db_tirage.tirage_date).getMonth()
  43. && date_now.getDate() === new Date(db_tirage.tirage_date).getDate()) {
  44. // exec tirage au sort
  45. User.countDocuments({ isActive: true, role: "client" }).exec(function (err, count) {
  46. if (count !== 0) {
  47. var random = Math.floor(Math.random() * count);
  48. User.findOne().skip(random).exec(
  49. function (err, result) {
  50. db_tirage.nb_users = count;
  51. db_tirage.random_user = random;
  52. db_tirage.isExecuted = true;
  53. db_tirage.executed_date = new Date();
  54. db_tirage.winner = result;
  55. db_tirage.save().then(
  56. () => {
  57. res.status(200).json({
  58. success: true,
  59. db_tirage
  60. });
  61. }
  62. ).catch(
  63. (error) => {
  64. res.status(400).json({
  65. error
  66. });
  67. }
  68. );
  69. });
  70. } else {
  71. res.json({
  72. success: false,
  73. count: "users not exists",
  74. })
  75. }
  76. })
  77. } else {
  78. res.json({
  79. success: false,
  80. message: 'La date choisi ne correspond pas a la date du tirage au sort',
  81. })
  82. }
  83. } else {
  84. res.json({
  85. success: false,
  86. message: "Le tirage a été déja effectué",
  87. })
  88. }
  89. }
  90. else {
  91. res.json({
  92. success: false,
  93. message: "La date n'est pas encore choisi",
  94. })
  95. }
  96. };
  97. //get winner of tirage
  98. exports.getWinnerTirage = async (req, res, next) => {
  99. count_tirage = await Tirage.countDocuments();
  100. tirage = await Tirage.findOne();
  101. if (count_tirage === 0) {
  102. res.status(404).json({
  103. success: false,
  104. message: `le tirage au sort n'est pas encore effectué`
  105. });
  106. }
  107. else {
  108. res.status(200).json(tirage);
  109. }
  110. };