Class: Api::V1::UsersController
- Inherits:
-
BaseController
- Object
- ActionController::API
- ApplicationController
- BaseController
- Api::V1::UsersController
- Includes:
- Cacheable, Paginatable
- Defined in:
- app/controllers/api/v1/users_controller.rb
Constant Summary
Constants included from Paginatable
Paginatable::DEFAULT_PER_PAGE, Paginatable::MAX_PER_PAGE
Instance Method Summary collapse
-
#create ⇒ JSON
POST /api/v1/users.
-
#destroy ⇒ JSON
DELETE /api/v1/users/:id Menghapus user berdasarkan ID.
-
#index ⇒ JSON
GET /api/v1/users Menampilkan daftar user dengan pagination dan cache.
-
#show ⇒ JSON
GET /api/v1/users/:id Mengambil detail user berdasarkan ID.
-
#update ⇒ JSON
PATCH/PUT /api/v1/users/:id Memperbarui user yang sudah ada berdasarkan ID.
Methods included from Cacheable
Methods included from Paginatable
#current_page, #pagination_meta, #per_page
Instance Method Details
#create ⇒ JSON
POST /api/v1/users
Membuat user baru dengan validasi menggunakan strong parameters. Menghapus cache terkait index.
54 55 56 57 58 |
# File 'app/controllers/api/v1/users_controller.rb', line 54 def create user = User.create!(user_params) invalidate_cache("users", skip_show: true) render_success(user, status: :created, serializer: UserSerializer) end |
#destroy ⇒ JSON
DELETE /api/v1/users/:id Menghapus user berdasarkan ID. Cache akan dihapus dan response tidak mengandung body.
74 75 76 77 78 |
# File 'app/controllers/api/v1/users_controller.rb', line 74 def destroy @user.destroy! invalidate_cache("users", id: @user.id) head :no_content end |
#index ⇒ JSON
GET /api/v1/users Menampilkan daftar user dengan pagination dan cache
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'app/controllers/api/v1/users_controller.rb', line 12 def index users_scope = User.order(created_at: :desc) paginated_users = users_scope.page(current_page).per(per_page) cache_key = [ "users/index", "updated-#{users_scope.maximum(:updated_at)&.to_i || 0}", "page-#{current_page}", "per_page-#{per_page}" ].join("/") serialized_users = Rails.cache.fetch(cache_key, expires_in: 1.hour) do ActiveModelSerializers::SerializableResource.new( paginated_users, each_serializer: UserSerializer ).as_json end render_success( serialized_users, meta: (paginated_users) ) end |
#show ⇒ JSON
GET /api/v1/users/:id Mengambil detail user berdasarkan ID. Menggunakan cache berdasarkan waktu terakhir update user.
40 41 42 43 44 45 46 |
# File 'app/controllers/api/v1/users_controller.rb', line 40 def show cache_key = "users/show/#{@user.id}/updated-#{@user.updated_at.to_i}" user_data = Rails.cache.fetch(cache_key, expires_in: 1.hour) do UserSerializer.new(@user).as_json end render_success(user_data) end |
#update ⇒ JSON
PATCH/PUT /api/v1/users/:id Memperbarui user yang sudah ada berdasarkan ID. Cache akan di-invalidate untuk user terkait.
64 65 66 67 68 |
# File 'app/controllers/api/v1/users_controller.rb', line 64 def update @user.update!(user_params) invalidate_cache("users", id: @user.id) render_success(@user, serializer: UserSerializer) end |