Skip to content

Commit 697abd2

Browse files
committed
updated controllers and integration tests as per Ruby Docotolib couchbase ORM
1 parent 61d865b commit 697abd2

File tree

8 files changed

+253
-243
lines changed

8 files changed

+253
-243
lines changed

app/controllers/api/v1/airlines_controller.rb

Lines changed: 31 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,36 +9,50 @@ class AirlinesController < ApplicationController
99
# GET /api/v1/airlines/{id}
1010
def show
1111
if @airline
12-
render json: @airline, status: :ok
12+
render json: @airline.attributes.except('id'), status: :ok
1313
else
14-
render json: { error: "Airline with ID #{params[:id]} not found" }, status: :not_found
14+
render json: { message: "Airline with ID #{params[:id]} not found" }, status: :not_found
1515
end
1616
rescue Couchbase::Error::DocumentNotFound => e
17-
render json: { error: "Airline with ID #{params[:id]} not found", message: e.message }, status: :not_found
17+
render json: { error: "Airline not found", message: e.message }, status: :not_found
1818
rescue StandardError => e
1919
render json: { error: 'Internal server error', message: e.message }, status: :internal_server_error
2020
end
2121

2222
# POST /api/v1/airlines/{id}
2323
def create
24-
@airline = Airline.create(airline_params)
24+
@airline = Airline.find_by(id: params[:id])
2525
if @airline
26-
render json: @airline, status: :created
26+
render json: { message: "Airline with ID #{params[:id]} already exists" }, status: :conflict
2727
else
28-
render json: { message: 'Airline already exists' }, status: :conflict
28+
@airline = Airline.create(airline_params)
29+
if @airline
30+
render json: @airline, status: :created
31+
else
32+
render json: { error: 'Failed to create airline' }, status: :bad_request
33+
end
2934
end
3035
rescue ArgumentError => e
3136
render json: { error: 'Invalid request', message: e.message }, status: :bad_request
32-
rescue Couchbase::Error::DocumentExists => e
33-
render json: { error: "Airline with ID #{params[:id]} already exists", message: e.message }, status: :conflict
3437
rescue StandardError => e
3538
render json: { error: 'Internal server error', message: e.message }, status: :internal_server_error
3639
end
3740

38-
# PUT /api/v1/airlines/{id}
3941
def update
40-
@airline = Airline.new(airline_params).update(airline_params)
41-
render json: @airline, status: :ok
42+
if @airline
43+
if @airline.update(airline_params)
44+
render json: @airline.attributes.except('id'), status: :ok
45+
else
46+
render json: { message: 'Failed to update airline' }, status: :bad_request
47+
end
48+
else
49+
@airline = Airline.create(airline_params)
50+
if @airline
51+
render json: @airline.attributes.except('id'), status: :ok
52+
else
53+
render json: { message: 'Airline already exists' }, status: :conflict
54+
end
55+
end
4256
rescue ArgumentError => e
4357
render json: { error: 'Invalid request', message: e.message }, status: :bad_request
4458
rescue StandardError => e
@@ -47,17 +61,18 @@ def update
4761

4862
# DELETE /api/v1/airlines/{id}
4963
def destroy
64+
@airline = Airline.find_by(id: params[:id])
5065
if @airline
51-
if @airline.destroy(params[:id])
66+
if @airline.destroy
5267
render json: { message: 'Airline deleted successfully' }, status: :accepted
5368
else
5469
render json: { message: 'Failed to delete airline' }, status: :bad_request
5570
end
5671
else
57-
render json: { error: "Airline with ID #{params[:id]} not found" }, status: :not_found
72+
render json: { message: "Airline with ID #{params[:id]} not found" }, status: :not_found
5873
end
5974
rescue Couchbase::Error::DocumentNotFound => e
60-
render json: { error: "Airline with ID #{params[:id]} not found", message: e.message }, status: :not_found
75+
render json: { error: "Airline not found", message: e.message }, status: :not_found
6176
rescue StandardError => e
6277
render json: { error: 'Internal server error', message: e.message }, status: :internal_server_error
6378
end
@@ -86,13 +101,13 @@ def index
86101
private
87102

88103
def set_airline
89-
@airline = Airline.find(params[:id])
104+
@airline = Airline.find_by(id: params[:id])
90105
rescue Couchbase::Error::DocumentNotFound
91106
@airline = nil
92107
end
93108

94109
def airline_params
95-
params.permit(:id, :name, :iata, :icao, :callsign, :country)
110+
params.require(:airline).permit(:id, :name, :iata, :icao, :callsign, :country)
96111
end
97112
end
98113
end

app/controllers/api/v1/airports_controller.rb

Lines changed: 34 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -9,39 +9,50 @@ class AirportsController < ApplicationController
99
# GET /api/v1/airports/{id}
1010
def show
1111
if @airport
12-
render json: @airport, status: :ok
12+
render json: @airport.attributes.except('id'), status: :ok
1313
else
14-
render json: { error: "Airport with ID #{params[:id]} not found" }, status: :not_found
14+
render json: { message: "Airport with ID #{params[:id]} not found" }, status: :not_found
1515
end
1616
rescue Couchbase::Error::DocumentNotFound => e
17-
render json: { error: "Airport with ID #{params[:id]} not found", message: e.message }, status: :not_found
17+
render json: { error: "Airport not found", message: e.message }, status: :not_found
1818
rescue StandardError => e
1919
render json: { error: 'Internal server error', message: e.message }, status: :internal_server_error
2020
end
2121

22-
# POST /api/v1/airports
22+
# POST /api/v1/airports/{id}
2323
def create
24-
@airport = Airport.create(airport_params)
24+
@airport = Airport.find_by(id: params[:id])
2525
if @airport
26-
render json: @airport, status: :created
26+
render json: { message: "Airport with ID #{params[:id]} already exists" }, status: :conflict
2727
else
28-
render json: { message: 'Airport already exists' }, status: :conflict
28+
@airport = Airport.create(airport_params)
29+
if @airport
30+
render json: @airport, status: :created
31+
else
32+
render json: { error: 'Failed to create airport' }, status: :bad_request
33+
end
2934
end
3035
rescue ArgumentError => e
3136
render json: { error: 'Invalid request', message: e.message }, status: :bad_request
32-
rescue Couchbase::Error::DocumentExists => e
33-
render json: { error: 'Airport already exists', message: e.message }, status: :conflict
3437
rescue StandardError => e
3538
render json: { error: 'Internal server error', message: e.message }, status: :internal_server_error
3639
end
3740

38-
# PUT /api/v1/airports/{id}
41+
# PATCH/PUT /api/v1/airports/{id}
3942
def update
4043
if @airport
41-
@airport.update(airport_params)
42-
render json: @airport, status: :ok
44+
if @airport.update(airport_params)
45+
render json: @airport.attributes.except('id'), status: :ok
46+
else
47+
render json: { message: 'Failed to update airport' }, status: :bad_request
48+
end
4349
else
44-
render json: { error: "Airport with ID #{params[:id]} not found" }, status: :not_found
50+
@airport = Airport.create(airport_params)
51+
if @airport
52+
render json: @airport.attributes.except('id'), status: :ok
53+
else
54+
render json: { message: 'Airport already exists' }, status: :conflict
55+
end
4556
end
4657
rescue ArgumentError => e
4758
render json: { error: 'Invalid request', message: e.message }, status: :bad_request
@@ -51,50 +62,32 @@ def update
5162

5263
# DELETE /api/v1/airports/{id}
5364
def destroy
65+
@airport = Airport.find_by(id: params[:id])
5466
if @airport
55-
@airport.destroy
56-
render json: { message: 'Airport deleted successfully' }, status: :accepted
67+
if @airport.destroy
68+
render json: { message: 'Airport deleted successfully' }, status: :accepted
69+
else
70+
render json: { message: 'Failed to delete airport' }, status: :bad_request
71+
end
5772
else
58-
render json: { error: "Airport with ID #{params[:id]} not found" }, status: :not_found
73+
render json: { message: "Airport with ID #{params[:id]} not found" }, status: :not_found
5974
end
6075
rescue Couchbase::Error::DocumentNotFound => e
61-
render json: { error: "Airport with ID #{params[:id]} not found", message: e.message }, status: :not_found
76+
render json: { error: "Airport not found", message: e.message }, status: :not_found
6277
rescue StandardError => e
6378
render json: { error: 'Internal server error', message: e.message }, status: :internal_server_error
6479
end
6580

66-
# GET /api/v1/airports/list
67-
# def index
68-
# airports = Airport.all
69-
# formatted_airports = airports.map do |airport|
70-
# {
71-
# id: airport.id,
72-
# airportname: airport.airportname,
73-
# city: airport.city,
74-
# country: airport.country,
75-
# faa: airport.faa,
76-
# icao: airport.icao,
77-
# tz: airport.tz,
78-
# geo: {
79-
# lat: airport.geo&.lat,
80-
# lon: airport.geo&.lon,
81-
# alt: airport.geo&.alt
82-
# }
83-
# }
84-
# end
85-
# render json: formatted_airports
86-
# end
87-
8881
private
8982

9083
def set_airport
91-
@airport = Airport.find(params[:id])
84+
@airport = Airport.find_by(id: params[:id])
9285
rescue Couchbase::Error::DocumentNotFound
9386
@airport = nil
9487
end
9588

9689
def airport_params
97-
params.require(:airport).permit(:id, :airportname, :city, :country, :faa, :icao, :tz, geo: %i[lat lon alt])
90+
params.require(:airport).permit(:id, :airportname, :city, :country, :faa, :icao, :tz, geo: [:lat, :lon, :alt])
9891
end
9992
end
10093
end

app/controllers/api/v1/routes_controller.rb

Lines changed: 37 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,35 +9,50 @@ class RoutesController < ApplicationController
99
# GET /api/v1/routes/{id}
1010
def show
1111
if @route
12-
render json: @route, status: :ok
12+
render json: @route.attributes.except('id'), status: :ok
1313
else
14-
render json: { error: "Route with ID #{params[:id]} not found" }, status: :not_found
14+
render json: { message: "Route with ID #{params[:id]} not found" }, status: :not_found
1515
end
16+
rescue Couchbase::Error::DocumentNotFound => e
17+
render json: { error: "Route not found", message: e.message }, status: :not_found
1618
rescue StandardError => e
1719
render json: { error: 'Internal server error', message: e.message }, status: :internal_server_error
1820
end
1921

20-
# POST /api/v1/routes
22+
# POST /api/v1/routes/{id}
2123
def create
22-
@route = Route.create(route_params)
24+
@route = Route.find_by(id: params[:id])
2325
if @route
24-
render json: @route, status: :created
26+
render json: { message: "Route with ID #{params[:id]} already exists" }, status: :conflict
2527
else
26-
render json: { message: 'Route already exists' }, status: :conflict
28+
@route = Route.create(route_params)
29+
if @route
30+
render json: @route, status: :created
31+
else
32+
render json: { error: 'Failed to create route' }, status: :bad_request
33+
end
2734
end
2835
rescue ArgumentError => e
2936
render json: { error: 'Invalid request', message: e.message }, status: :bad_request
3037
rescue StandardError => e
3138
render json: { error: 'Internal server error', message: e.message }, status: :internal_server_error
3239
end
3340

34-
# PUT /api/v1/routes/{id}
41+
# PATCH/PUT /api/v1/routes/{id}
3542
def update
3643
if @route
37-
@route.update(route_params)
38-
render json: @route, status: :ok
44+
if @route.update(route_params)
45+
render json: @route.attributes.except('id'), status: :ok
46+
else
47+
render json: { message: 'Failed to update route' }, status: :bad_request
48+
end
3949
else
40-
render json: { error: "Route with ID #{params[:id]} not found" }, status: :not_found
50+
@route = Route.create(route_params)
51+
if @route
52+
render json: @route.attributes.except('id'), status: :ok
53+
else
54+
render json: { message: 'Route already exists' }, status: :conflict
55+
end
4156
end
4257
rescue ArgumentError => e
4358
render json: { error: 'Invalid request', message: e.message }, status: :bad_request
@@ -47,50 +62,32 @@ def update
4762

4863
# DELETE /api/v1/routes/{id}
4964
def destroy
65+
@route = Route.find_by(id: params[:id])
5066
if @route
51-
@route.destroy
52-
render json: { message: 'Route deleted successfully' }, status: :accepted
67+
if @route.destroy
68+
render json: { message: 'Route deleted successfully' }, status: :accepted
69+
else
70+
render json: { message: 'Failed to delete route' }, status: :bad_request
71+
end
5372
else
54-
render json: { error: "Route with ID #{params[:id]} not found" }, status: :not_found
73+
render json: { message: "Route with ID #{params[:id]} not found" }, status: :not_found
5574
end
75+
rescue Couchbase::Error::DocumentNotFound => e
76+
render json: { error: "Route not found", message: e.message }, status: :not_found
5677
rescue StandardError => e
5778
render json: { error: 'Internal server error', message: e.message }, status: :internal_server_error
5879
end
5980

60-
# GET /api/v1/routes
61-
# def index
62-
# routes = Route.all
63-
# formatted_routes = routes.map do |route|
64-
# {
65-
# airline: route.airline,
66-
# airlineid: route.airlineid,
67-
# sourceairport: route.sourceairport,
68-
# destinationairport: route.destinationairport,
69-
# stops: route.stops,
70-
# equipment: route.equipment,
71-
# schedule: route.schedule,
72-
# distance: route.distance
73-
# }
74-
# end
75-
# render json: formatted_routes
76-
# rescue StandardError => e
77-
# render json: { error: e.message }, status: :internal_server_error
78-
# end
79-
8081
private
8182

8283
def set_route
83-
@route = Route.find(params[:id])
84-
rescue ActiveRecord::RecordNotFound
84+
@route = Route.find_by(id: params[:id])
85+
rescue Couchbase::Error::DocumentNotFound
8586
@route = nil
8687
end
8788

8889
def route_params
89-
params.require(:route).permit(
90-
:id, :airline, :airlineid, :sourceairport,
91-
:destinationairport, :stops, :equipment, :distance,
92-
schedule: %i[day flight utc]
93-
)
90+
params.require(:route).permit(:id, :type, :airline, :airlineid, :sourceairport, :destinationairport, :stops, :equipment, :distance, schedule: [:day, :utc, :flight])
9491
end
9592
end
9693
end

app/models/airline.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
require 'couchbase-orm'
22

3-
class Airline < ApplicationRecord
3+
class Airline < CouchbaseOrm::Base
44
attribute :name, :string
55
attribute :callsign, :string
66
attribute :iata, :string

app/models/route.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ class Route < CouchbaseOrm::Base
1616
attribute :destinationairport, :string
1717
attribute :stops, :integer
1818
attribute :equipment, :string
19-
attribute :schedule, :array, of: ScheduleDetail
19+
attribute :schedule, :array, type: ScheduleDetail
2020
attribute :distance, :float
2121

2222
validates :type, presence: true

0 commit comments

Comments
 (0)