• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

atlp-rwanda / e-commerce-bitcrafters-bn / 0568eb11-ca70-42be-b431-0b473cd86bfc

18 Jun 2024 08:11AM UTC coverage: 93.493% (-0.3%) from 93.747%
0568eb11-ca70-42be-b431-0b473cd86bfc

push

circleci

web-flow
Fix: Adding pagination and correcting all user retrieval (#107)

458 of 509 branches covered (89.98%)

Branch coverage included in aggregate %.

45 of 49 new or added lines in 6 files covered. (91.84%)

1 existing line in 1 file now uncovered.

1496 of 1581 relevant lines covered (94.62%)

5.16 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

92.16
/src/controllers/adminController.ts
1
import { Request, Response } from 'express'
2
import User from '../database/models/userModel'
2✔
3
import sendMail from '../utils/sendEmail'
2✔
4
import disableUserTemplate from '../utils/emailTemplates/disableUserTemplate'
2✔
5
import enableUserTemplate from '../utils/emailTemplates/enableUserTemplate'
2✔
6
import Paginator from '../utils/paginator'
2✔
7
import { getUsersCount } from '../services/userServices'
2✔
8

9
export default class adminContoller {
2✔
10
/**
11
 * Get all users
12
 * @param {Request} req - Express request object
13
 * @param {Response} res - Express response object
14
 * @returns {Promise<Response>} Promise that resolves to an Express response
15
 */
16
static async getAllUsers(req: Request, res: Response): Promise<Response> {
17
  try {
4✔
18
    
19
    const paginationResults = Paginator(req, res)
4✔
20

21
    if(!paginationResults){
2!
NEW
22
      return res
×
23
  .status(400)
24
  .json({ message: 'Invalid pagination parameters' })
25
}
26

27
const {offset, limit, page} = paginationResults
2✔
28

29
const totalCount: number = await getUsersCount()
2✔
30
const totalPages = Math.ceil(totalCount / limit)
2✔
31

32
    const users = await User.findAll({
2✔
33
      attributes: { exclude: ['password'] },
34
      offset,
35
      limit
36
    });
37
    return res.status(200).json({
2✔
38
      message: 'Users retrieved successfully',
39
      users,
40
      pagination: { limit, page, totalPages },
41
    });
42
  } catch (error) {
43
    return res.status(500).json({ error: error.message });
2✔
44
  }
45
}
46

47

48
  /**
49
   * Update user status
50
   * @param {Request} req - Express request object
51
   * @param {Response} res - Express response object
52
   * @returns {Promise<Response>} Promise that resolves to an Express response
53
   */
54
  static async updateStatus(req: Request, res: Response): Promise<Response> {
55
    try {
12✔
56
      const { userId } = req.params
12✔
57
      const { newStatus, description } = req.body
12✔
58

59
      if (!newStatus) {
12✔
60
        return res.status(400).json({ message: 'New status is required' })
2✔
61
      }
62

63
      if (!description && newStatus === 'inactive') {
10✔
64
        return res
2✔
65
          .status(400)
66
          .json({ message: 'Description is required for deactivation' })
67
      }
68

69
      const user = await User.findByPk(userId)
8✔
70

71
      if (!user) {
6✔
72
        return res.status(404).json({ message: 'User not found' })
2✔
73
      }
74

75
      if (user.status === newStatus) {
4✔
76
        return res.status(400).json({ message: `User is already ${newStatus}` })
2✔
77
      }
78

79
      user.status = newStatus
2✔
80
      await user.save()
2✔
81

82
      const html =
83
        newStatus === 'inactive'
2!
84
          ? disableUserTemplate(user.username, description)
85
          : enableUserTemplate(user.username)
86

87
      try {
2✔
88
        await sendMail(user.email, `Confirmation of account status`, html)
2✔
89
        return res
2✔
90
          .status(200)
91
          .json({
92
            message: `User is now ${newStatus}, email sent successfully`,
93
          })
94
      } catch (emailError) {
95
        return res
×
96
          .status(500)
97
          .json({
98
            message: `User is now ${newStatus}, but failed to send email`,
99
            error: emailError.message,
100
          })
101
      }
102
    } catch (error) {
103
      return res
2✔
104
        .status(500)
105
        .json({ message: 'Internal server error', error: error.message })
106
    }
107
  }
108
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc