diff --git a/.gitignore b/.gitignore index 061314adc..f1eed7367 100644 --- a/.gitignore +++ b/.gitignore @@ -17,3 +17,4 @@ /config/configuration.yml .rbenv-gemsets .DS_Store +public/api_doc/ diff --git a/Gemfile b/Gemfile index 34a1a7956..1fe5b6c0f 100644 --- a/Gemfile +++ b/Gemfile @@ -20,6 +20,7 @@ gem "builder", "3.0.0" gem 'acts-as-taggable-on', '2.4.1' group :development do + gem 'grape-swagger' gem 'puma' gem 'better_errors', path: 'lib/better_errors' gem 'rack-mini-profiler', path: 'lib/rack-mini-profiler' diff --git a/Gemfile.lock b/Gemfile.lock index 377ded53e..95ea5b6e2 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -110,6 +110,9 @@ GEM grape-entity (0.4.4) activesupport multi_json (>= 1.3.2) + grape-swagger (0.8.0) + grape + grape-entity guard (2.6.1) formatador (>= 0.2.4) listen (~> 2.7) @@ -307,6 +310,7 @@ DEPENDENCIES fastercsv (~> 1.5.0) grape (~> 0.9.0) grape-entity + grape-swagger guard-rails (~> 0.5.3) guard-spork (~> 1.5.1) guard-test (~> 1.0.0) diff --git a/app/api/mobile/api.rb b/app/api/mobile/api.rb index b540c73d3..64016458e 100644 --- a/app/api/mobile/api.rb +++ b/app/api/mobile/api.rb @@ -27,7 +27,9 @@ module Mobile mount Apis::Auth mount Apis::Users mount Apis::Courses + mount Apis::Watches + add_swagger_documentation ({api_version: 'v1', base_path: '/api'}) end end diff --git a/app/api/mobile/apis/auth.rb b/app/api/mobile/apis/auth.rb index fa6fec6e2..ae233a853 100644 --- a/app/api/mobile/apis/auth.rb +++ b/app/api/mobile/apis/auth.rb @@ -10,12 +10,12 @@ module Mobile module Apis class Auth < Grape::API resource :auth do - desc "Creates and returns access_token if valid login" + desc "用户登录" params do requires :login, type: String, desc: 'Username or email' requires :password, type: String, desc: 'Password' end - post :login do + post do user,last_logon = ::User.try_to_login(params[:login], params[:password]) if user ::ApiKey.delete_all(user_id: user.id) @@ -27,6 +27,17 @@ module Mobile {status: 1, message: 'Unauthorized.'} end end + + desc "用户登出" + params do + requires :token, type: String + end + delete do + authenticate! + ::ApiKey.delete_all(user_id: current_user.id) + {status: 0} + end + end end end diff --git a/app/api/mobile/apis/courses.rb b/app/api/mobile/apis/courses.rb index 1084e8cbc..9aeea5176 100644 --- a/app/api/mobile/apis/courses.rb +++ b/app/api/mobile/apis/courses.rb @@ -2,11 +2,11 @@ module Mobile module Apis class Courses < Grape::API resource :courses do - desc "get all courses" + desc "获取所有课程" params do - optional :school_id, type: Integer, desc: 'school number' - requires :per_page_count, type: Integer - requires :page, type: Integer, desc: 'current page no' + optional :school_id, type: Integer, desc: '传入学校id,返回该学校课程列表' + requires :per_page_count, type: Integer, desc: '每页总数' + requires :page, type: Integer, desc: '当前页码' end get do cs = CoursesService.new @@ -15,7 +15,7 @@ module Mobile present :status, 0 end - desc "Return a course" + desc "返回单个课程" params do requires :id, type: Integer end diff --git a/app/api/mobile/apis/users.rb b/app/api/mobile/apis/users.rb index 9b5bf8c73..d05809726 100644 --- a/app/api/mobile/apis/users.rb +++ b/app/api/mobile/apis/users.rb @@ -2,12 +2,8 @@ module Mobile module Apis class Users < Grape::API resource :users do - desc "get all users" - get do - ['hello'] - end - desc "add a user" + desc "注册用户" params do requires :login, type: String, desc: 'username' requires :mail, type: String, desc: 'mail' @@ -27,8 +23,9 @@ module Mobile end - desc "modify user" + desc "修改用户" params do + requires :token, type: String #optional :file, type: File, desc: 'avatar' optional :occupation, type: String optional :brief_introduction, type: String @@ -40,7 +37,7 @@ module Mobile authenticate! us = UsersService.new begin - ue = us.edit_user params + ue = us.edit_user params.merge(id: current_user.id) {status: 0, data: ue} rescue => e {status: 1, message: e.message} diff --git a/app/api/mobile/apis/watches.rb b/app/api/mobile/apis/watches.rb new file mode 100644 index 000000000..0715ff4a2 --- /dev/null +++ b/app/api/mobile/apis/watches.rb @@ -0,0 +1,53 @@ +module Mobile + module Apis + class Watches < Grape::API + resource :watches do + + desc "获取所有关注" + params do + requires :token, type: String + end + get do + authenticate! + ws = UsersService.new + ws.user_watcher(id: current_user.id) + end + + + desc "关注某人" + params do + requires :token, type: String + requires :object_id, type: Integer, desc: '关注的用户的id' + end + post do + authenticate! + ws = WatchesService.new + begin + o = ws.watch(params.merge({current_user_id:current_user.id, object_type:'user' }) ) + {status:0 , data: o} + rescue =>e + {status:1, message: e.message} + end + end + + + desc "取消关注" + params do + requires :token, type: String + requires :object_id, type: Integer, desc: '取消关注的用户的id' + end + delete do + authenticate! + ws = WatchesService.new + begin + ws.unwatch(params.merge({current_user_id:current_user.id, object_type:'user' }) ) + {status:0} + rescue =>e + {status:1, message: e.message} + end + end + + end + end + end +end \ No newline at end of file diff --git a/app/controllers/watchers_controller.rb b/app/controllers/watchers_controller.rb index 096e44f06..f6d01a03d 100644 --- a/app/controllers/watchers_controller.rb +++ b/app/controllers/watchers_controller.rb @@ -17,7 +17,7 @@ class WatchersController < ApplicationController before_filter :require_login#, :find_watchables, :only => [:watch, :unwatch] def watch - s = Service.new + s = WatchesService.new watchables = s.watch params.merge(:current_user_id => User.current.id) respond_to do |format| format.html { redirect_to_referer_or {render :text => (true ? 'Watcher added.' : 'Watcher removed.'), :layout => true}} @@ -33,7 +33,7 @@ class WatchersController < ApplicationController end def unwatch - s = Service.new + s = WatchesService.new watchables = s.unwatch params.merge(:current_user_id => User.current.id) respond_to do |format| format.html { redirect_to_referer_or {render :text => (false ? 'Watcher added.' : 'Watcher removed.'), :layout => true}} diff --git a/app/services/service.rb b/app/services/watches_service.rb similarity index 96% rename from app/services/service.rb rename to app/services/watches_service.rb index 413d9bfb8..2b9bed3cd 100644 --- a/app/services/service.rb +++ b/app/services/watches_service.rb @@ -1,4 +1,4 @@ -class Service +class WatchesService def watch params @current_user = User.find(params[:current_user_id]) @watchables = find_watchables params