a
    !hF                     @   s  d dl mZmZ d dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ ddlmZ e	edgd	d
deddidedgdddeidedgddede
dddididedgddede
dddididedgddde
dddididd G d!d" d"ejZd#S )$    )viewsetsstatus)Response)IsAuthenticatedOrReadOnly)extend_schemaextend_schema_viewOpenApiExample)koleksi   )CategorySerializerzCategory Managementz!Daftar semua kategori (recursive)zTMengambil semua kategori secara hierarkis dari root menggunakan method `_recursive`.   T)many)tagssummarydescription	responseszDetail kategorizBMenampilkan satu kategori berdasarkan ID, menggunakan `_read_one`.zTambah kategoriz?Menambah kategori baru menggunakan method `_create` dari model.   ZBerhasildetailBerhasil menyimpan data.)value)r   r   r   requestr   zUpdate kategoriz?Mengubah data kategori menggunakan method `_update` dari model.Berhasil mengubah data.zHapus kategorizHMenghapus kategori beserta anak-anaknya menggunakan `_delete_recursive`.   Berhasil hapus data.)listretrievecreateupdatedestroyc                   @   sD   e Zd ZdZegZdd ZdddZdd Zdd	d
Z	dddZ
dS )CategoryViewSetzq
    ViewSet kategori yang mengikuti logic lama (bukan langsung ORM),
    tapi lewat method custom di model.
    c                 C   s   t jjdd}t|tjdS )Nr   )	pk_parentr   )	m_koleksi
Categories
_recursiver   r   HTTP_200_OK)selfr   data r(   QD:\WORK\M-FILE\MFILE_PAPTENG_NEW\mfile_papteng_new\webapp\api\categories\views.pyr   3   s    zCategoryViewSet.listNc                 C   s2   t jj|d}|s$tdditjdS t|tjdS )N)pkr   zKategori tidak ditemukan.r!   )r"   r#   	_read_oner   r   HTTP_404_NOT_FOUNDr%   )r&   r   r*   r'   r(   r(   r)   r   7   s    zCategoryViewSet.retrievec              
   C   sz   dd |j  D }z&tjjf i | tdditjdW S  tyt } z"tdt	|itj
dW  Y d }~S d }~0 0 d S )Nc                 S   s   i | ]\}}||qS r(   r(   .0kvr(   r(   r)   
<dictcomp>>       z*CategoryViewSet.create.<locals>.<dictcomp>r   r   r!   )r'   itemsr"   r#   _creater   r   HTTP_201_CREATED	ExceptionstrHTTP_400_BAD_REQUEST)r&   r   valueser(   r(   r)   r   =   s    zCategoryViewSet.createc              
   C   s~   dd |j  D }d|i}z"tj|| tdditjdW S  tyx } z"tdt	|itj
dW  Y d }~S d }~0 0 d S )Nc                 S   s   i | ]\}}||qS r(   r(   r-   r(   r(   r)   r1   F   r2   z*CategoryViewSet.update.<locals>.<dictcomp>r*   r   r   r!   )r'   r3   r"   r#   _updater   r   r%   r6   r7   r8   )r&   r   r*   r9   keysr:   r(   r(   r)   r   E   s    zCategoryViewSet.updatec              
   C   s`   z t j| tdditjdW S  tyZ } z"tdt|itjdW  Y d }~S d }~0 0 d S )Nr   r   r!   )	r"   r#   _delete_recursiver   r   HTTP_204_NO_CONTENTr6   r7   r8   )r&   r   r*   r:   r(   r(   r)   r   N   s
    zCategoryViewSet.destroy)N)N)N)__name__
__module____qualname____doc__r   permission_classesr   r   r   r   r   r(   r(   r(   r)   r   	   s   #

	r   N)rest_frameworkr   r   rest_framework.responser   Zrest_framework.permissionsr   drf_spectacular.utilsr   r   r   Zwebapp.modelsr	   r"   serializersr   ViewSetr   r(   r(   r(   r)   <module>   sP   "