import logging from odoo import http from odoo.http import request from odoo.addons.encoach_api.controllers.base import ( jwt_required, _json_response, _error_response, _get_json_body, _paginate, ) _logger = logging.getLogger(__name__) def _ser_classroom(r): return { 'id': r.id, 'name': r.name or '', 'code': getattr(r, 'code', '') or '', 'course_id': r.course_id.id if hasattr(r, 'course_id') and r.course_id else 0, 'course_name': r.course_id.name if hasattr(r, 'course_id') and r.course_id else '', 'capacity': getattr(r, 'capacity', 0) or 0, } class ClassroomsController(http.Controller): @http.route('/api/groups', type='http', auth='public', methods=['GET'], csrf=False) @jwt_required def list_groups(self, **kw): try: M = request.env['op.classroom'].sudo() offset, limit, page = _paginate(kw) total = M.search_count([]) recs = M.search([], offset=offset, limit=limit, order='id desc') items = [_ser_classroom(r) for r in recs] return _json_response({'items': items, 'data': items, 'total': total, 'page': page, 'size': limit}) except Exception as e: return _error_response(str(e), 500) @http.route('/api/groups/', type='http', auth='public', methods=['GET'], csrf=False) @jwt_required def get_group(self, gid, **kw): try: rec = request.env['op.classroom'].sudo().browse(gid) if not rec.exists(): return _error_response('Not found', 404) return _json_response(_ser_classroom(rec)) except Exception as e: return _error_response(str(e), 500) @http.route('/api/groups', type='http', auth='public', methods=['POST'], csrf=False) @jwt_required def create_group(self, **kw): try: body = _get_json_body() vals = {'name': body.get('name', '')} if body.get('code'): vals['code'] = body['code'] if body.get('capacity'): vals['capacity'] = int(body['capacity']) rec = request.env['op.classroom'].sudo().create(vals) return _json_response(_ser_classroom(rec)) except Exception as e: return _error_response(str(e), 500) @http.route('/api/groups/', type='http', auth='public', methods=['DELETE'], csrf=False) @jwt_required def delete_group(self, gid, **kw): try: rec = request.env['op.classroom'].sudo().browse(gid) if rec.exists(): rec.unlink() return _json_response({'success': True}) except Exception as e: return _error_response(str(e), 500) @http.route('/api/groups/transfer', type='http', auth='public', methods=['POST'], csrf=False) @jwt_required def transfer(self, **kw): try: return _json_response({'success': True}) except Exception as e: return _error_response(str(e), 500) @http.route('/api/groups//members', type='http', auth='public', methods=['POST'], csrf=False) @jwt_required def add_members(self, gid, **kw): try: return _json_response({'success': True}) except Exception as e: return _error_response(str(e), 500) @http.route('/api/groups//members/remove', type='http', auth='public', methods=['POST'], csrf=False) @jwt_required def remove_members(self, gid, **kw): try: return _json_response({'success': True}) except Exception as e: return _error_response(str(e), 500)