o
    !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.   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)   >/var/www/html/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   sv   dd |j  D }ztjjdi | tdditjdW S  ty: } ztdt	|itj
dW  Y d }~S d }~ww )Nc                 S      i | ]\}}||qS r)   r)   .0kvr)   r)   r*   
<dictcomp>>       z*CategoryViewSet.create.<locals>.<dictcomp>r   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   sz   dd |j  D }d|i}ztj|| tdditjdW S  ty< } ztdt	|itj
dW  Y d }~S d }~ww )Nc                 S   r.   r)   r)   r/   r)   r)   r*   r3   F   r4   z*CategoryViewSet.update.<locals>.<dictcomp>r+   r   r   r"   )r(   r5   r#   r$   _updater   r   r&   r8   r9   r:   )r'   r   r+   r;   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y- } ztdt|itjdW  Y d }~S d }~ww )Nr   r   r"   )	r#   r$   _delete_recursiver   r   HTTP_204_NO_CONTENTr8   r9   r:   )r'   r   r+   r<   r)   r)   r*   r   N   s   "zCategoryViewSet.destroy)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   rest_framework.permissionsr   drf_spectacular.utilsr   r   r   webapp.modelsr	   r#   serializersr   ViewSetr    r)   r)   r)   r*   <module>   sR    "