usman 0.3.23 → 0.3.24

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 33ba753caf08121272839720af4e449f7d672b7b
4
- data.tar.gz: 9d05d3a4c1c588675cd87041e5ae1ed1577fddfe
3
+ metadata.gz: 58b44b778d452ed6091870274ebe07eee259b955
4
+ data.tar.gz: 6b861e63e0b1fe9b15c237fcf9cc942adb38de68
5
5
  SHA512:
6
- metadata.gz: e1f7936558d730092101c40def1efd7feb96cad43de7138b605a9fc718c5706aeb6b358b0c1535f66f698be19dcad836ad08100523dd3e9fdc6a8aca115c4242
7
- data.tar.gz: d335fb1843c90755b61013b37ddd356c47efe691a7fef30dd1e905225bd05e5e3be8a0cceef64a1e95a69bdc54d8735202b5383f8e741e98ec7b5d48985c5d6d
6
+ metadata.gz: d99f6f25b5a0abbd550dd782a8feac4cfeb3e7e2336b3c0ed0185c43a66903c31a85b169c79f6f02899f2de733b0566c1d12472da5e5c47124034243dc9e3fc5
7
+ data.tar.gz: 12715344385c0f2357623a416af99cb94b8b4f45d7d2c7e38398ea2f4669b2d3a36fae6108093cffbc2ee5ca5b5e89fb20358dba56fe7a8d8b21b9365e79d0c4
@@ -0,0 +1,116 @@
1
+ module Usman
2
+ module Api
3
+ module V1
4
+ class ContactsController < Usman::Api::V1::BaseController
5
+
6
+ def sync
7
+ proc_code = Proc.new do
8
+ if @current_registration
9
+ unless @current_user
10
+ @success = false
11
+ @errors = {
12
+ heading: I18n.translate("api.profile.user_does_not_exists.heading"),
13
+ message: I18n.translate("api.profile.user_does_not_exists.message")
14
+ }
15
+ else
16
+
17
+ contacts = []
18
+ params[:contacts].each do |cnt|
19
+ contact = Usman::Contact.new
20
+
21
+ contact.name = cnt["name"]
22
+ contact.account_type = cnt["account_type"]
23
+ contact.email = cnt["email"]
24
+ contact.contact_number_1 = cnt["contact_number_1"]
25
+ contact.contact_number_2 = cnt["contact_number_2"]
26
+ contact.contact_number_3 = cnt["contact_number_3"]
27
+ contact.contact_number_4 = cnt["contact_number_4"]
28
+
29
+ contact.owner = @current_user
30
+ contact.done_deal_user = contact.get_done_deal_user
31
+ contact.registration = @current_registration
32
+ contact.device = @current_device
33
+
34
+ contact.save
35
+ contacts << contact if contact.done_deal_user_id
36
+ end
37
+
38
+ @success = true
39
+ @alert = {
40
+ heading: I18n.translate("api.contacts.synced_successfully.heading"),
41
+ message: I18n.translate("api.contacts.synced_successfully.message")
42
+ }
43
+ @data = ActiveModelSerializers::SerializableResource.new(contacts, each_serializer: ContactSerializer)
44
+ end
45
+ else
46
+ @success = false
47
+ @errors = {
48
+ heading: I18n.translate("api.profile.registration_details_missing.heading"),
49
+ message: I18n.translate("api.profile.registration_details_missing.message")
50
+ }
51
+ end
52
+ end
53
+ render_json_response(proc_code)
54
+ end
55
+
56
+ def index
57
+ proc_code = Proc.new do
58
+ if @current_registration
59
+ unless @current_user
60
+ @success = false
61
+ @errors = {
62
+ heading: I18n.translate("api.profile.user_does_not_exists.heading"),
63
+ message: I18n.translate("api.profile.user_does_not_exists.message")
64
+ }
65
+ else
66
+ @contacts = @current_user.contacts.page(@current_page).per(@per_page)
67
+ @success = true
68
+ @data = ActiveModelSerializers::SerializableResource.new(@contacts, each_serializer: ContactSerializer)
69
+ end
70
+ else
71
+ @success = false
72
+ @errors = {
73
+ heading: I18n.translate("api.profile.registration_details_missing.heading"),
74
+ message: I18n.translate("api.profile.registration_details_missing.message")
75
+ }
76
+ end
77
+ end
78
+ render_json_response(proc_code)
79
+ end
80
+
81
+ def show
82
+ proc_code = Proc.new do
83
+ if @current_registration
84
+ unless @current_user
85
+ @success = false
86
+ @errors = {
87
+ heading: I18n.translate("api.profile.user_does_not_exists.heading"),
88
+ message: I18n.translate("api.profile.user_does_not_exists.message")
89
+ }
90
+ else
91
+ @contact = @current_user.contacts.where(id: params[:id]).first || @current_user.contacts.build
92
+ @success = true
93
+ @data = ActiveModelSerializers::SerializableResource.new(@contact, serializer: ContactSerializer)
94
+ end
95
+ else
96
+ @success = false
97
+ @errors = {
98
+ heading: I18n.translate("api.profile.registration_details_missing.heading"),
99
+ message: I18n.translate("api.profile.registration_details_missing.message")
100
+ }
101
+ end
102
+ end
103
+ render_json_response(proc_code)
104
+ end
105
+
106
+ private
107
+
108
+ def permitted_params
109
+ params.permit(:name, :account_type, :email, :address, :contact_number_1, :contact_number_2, :contact_number_3, :contact_number_4)
110
+ end
111
+
112
+ end
113
+ end
114
+ end
115
+ end
116
+
@@ -207,6 +207,100 @@ module Usman
207
207
  render 'kuppayam/api/docs/show'
208
208
  end
209
209
 
210
+
211
+ def contacts_sync
212
+ set_title("Sync Contacts")
213
+ @request_type = "POST"
214
+ @end_point = "/api/v1/contacts/sync"
215
+ @description = <<-eos
216
+ This API sync all the contacts with donedeal backend
217
+ eos
218
+
219
+ @input_headers = {
220
+ "Content-Type" => { value: "application/json", description: "The MIME media type for JSON text is application/json. This is to make sure that a valid json is returned. The default encoding is UTF-8. " },
221
+ "Authorization" => { value: "Token token=\"103652edd6bbdc72b770d3c8cb88b18d\"", description: "Put the API Token here. You shall get the API token after registering your device" }
222
+ }
223
+
224
+ @input_params = {
225
+ contacts: {
226
+ mandatory: true,
227
+ description: "Json array of contact informations",
228
+ example: '[
229
+ {
230
+ "name": "Mohanlala",
231
+ "account_type": "com.mollywood",
232
+ "email": "mohanlal@gmail.com",
233
+ "address": "xyz, str, efg",
234
+ "contact_number_1": "87393993884",
235
+ "contact_number_2":"9846557465"
236
+ },
237
+ {
238
+ "name": "Mammukka",
239
+ "account_type": "com.mollywood1",
240
+ "email": "mammukka@gmail.com",
241
+ "address": "xyz, str, efg",
242
+ "contact_number_1": "7046338475",
243
+ "contact_number_2":"8086500502"
244
+ }
245
+ ]',
246
+ default: ""
247
+ },
248
+ }
249
+
250
+ @example_path = "usman/api/v1/docs/"
251
+ @examples = ["pos_case_1", "neg_case_1"]
252
+
253
+ set_nav("docs/usman/contacts_sync")
254
+
255
+ render 'kuppayam/api/docs/show'
256
+ end
257
+
258
+ def all_contacts
259
+ set_title("Get All Contacts")
260
+ @request_type = "GET"
261
+ @end_point = "/api/v1/contacts"
262
+ @description = <<-eos
263
+ This API fetch all the contacts of coresponding logged user
264
+ eos
265
+
266
+ @input_headers = {
267
+ "Content-Type" => { value: "application/json", description: "The MIME media type for JSON text is application/json. This is to make sure that a valid json is returned. The default encoding is UTF-8. " },
268
+ "Authorization" => { value: "Token token=\"103652edd6bbdc72b770d3c8cb88b18d\"", description: "Put the API Token here. You shall get the API token after registering your device" }
269
+ }
270
+
271
+ @input_params = {}
272
+
273
+ @example_path = "usman/api/v1/docs/"
274
+ @examples = ["pos_case_1", "neg_case_1"]
275
+
276
+ set_nav("docs/usman/all_contacts")
277
+
278
+ render 'kuppayam/api/docs/show'
279
+ end
280
+
281
+ def single_contacts
282
+ set_title("Single Contacts")
283
+ @request_type = "GET"
284
+ @end_point = "/api/v1/contacts/:id"
285
+ @description = <<-eos
286
+ This API fetch single contacts from the Data base coresponding logged user
287
+ eos
288
+
289
+ @input_headers = {
290
+ "Content-Type" => { value: "application/json", description: "The MIME media type for JSON text is application/json. This is to make sure that a valid json is returned. The default encoding is UTF-8. " },
291
+ "Authorization" => { value: "Token token=\"103652edd6bbdc72b770d3c8cb88b18d\"", description: "Put the API Token here. You shall get the API token after registering your device" }
292
+ }
293
+
294
+ @input_params = {}
295
+
296
+ @example_path = "usman/api/v1/docs/"
297
+ @examples = ["pos_case_1", "neg_case_1"]
298
+
299
+ set_nav("docs/usman/single_contacts")
300
+
301
+ render 'kuppayam/api/docs/show'
302
+ end
303
+
210
304
  def upload_profile_picture_base64
211
305
  set_title("Upload Profile Picture API (base64)")
212
306
  @request_type = "POST"
@@ -292,6 +386,9 @@ module Usman
292
386
  create_profile: { nav_class: "docs/usman/create_profile", icon_class: "fa-user", url: usman.docs_api_v1_create_profile_path, text: "Create Profile API"},
293
387
  update_profile: { nav_class: "docs/usman/update_profile", icon_class: "fa-user", url: usman.docs_api_v1_update_profile_path, text: "Update Profile API"},
294
388
  get_profile_info: { nav_class: "docs/usman/get_profile_info", icon_class: "fa-user", url: usman.docs_api_v1_get_profile_info_path, text: "Get Profile Info API"},
389
+ contacts_sync: { nav_class: "docs/usman/contacts_sync", icon_class: "fa-user", url: usman.docs_api_v1_contacts_sync_path, text: "Contact Syncing"},
390
+ all_contacts: { nav_class: "docs/usman/all_contacts", icon_class: "fa-user", url: usman.docs_api_v1_all_contacts_path, text: "Get All Contacts"},
391
+ single_contacts: { nav_class: "docs/usman/single_contacts", icon_class: "fa-user", url: usman.docs_api_v1_single_contacts_path, text: "Single Contact"},
295
392
  upload_profile_picture_base64: { nav_class: "docs/usman/upload_profile_picture_base64", icon_class: "fa-photo", url: usman.docs_api_v1_upload_profile_picture_base64_path, text: "Upload Profile Picture (Base64)"},
296
393
  upload_profile_picture: { nav_class: "docs/usman/upload_profile_picture", icon_class: "fa-photo", url: usman.docs_api_v1_upload_profile_picture_path, text: "Upload Profile Picture"},
297
394
  delete_profile_picture: { nav_class: "docs/usman/delete_profile_picture", icon_class: "fa-photo", url: usman.docs_api_v1_delete_profile_picture_path, text: "Remove Profile Picture"}
data/app/models/device.rb CHANGED
@@ -22,6 +22,7 @@ class Device < ApplicationRecord
22
22
  # Associations
23
23
  belongs_to :user, optional: true
24
24
  belongs_to :registration
25
+ has_many :contacts, class_name: "Usman::Contact"
25
26
 
26
27
  # Validations
27
28
  validates :uuid, presence: true, length: {maximum: 1024}
@@ -24,6 +24,7 @@ class Registration < ApplicationRecord
24
24
  belongs_to :country
25
25
  belongs_to :city, optional: true
26
26
  has_many :devices
27
+ has_many :contacts, class_name: "Usman::Contact"
27
28
 
28
29
  # Validations
29
30
  validates :dialing_prefix, presence: true, length: {minimum: 2, maximum: 4}
data/app/models/user.rb CHANGED
@@ -62,6 +62,7 @@ class User < Usman::ApplicationRecord
62
62
  has_many :features, through: :permissions
63
63
  has_many :devices
64
64
  has_one :registration
65
+ has_many :contacts, class_name: "Usman::Contact", foreign_key: :owner_id
65
66
  has_and_belongs_to_many :roles
66
67
  belongs_to :country, optional: true
67
68
  belongs_to :city, optional: true
@@ -0,0 +1,78 @@
1
+ class Usman::Contact < Usman::ApplicationRecord
2
+
3
+ # Set Table Name
4
+ self.table_name = "contacts"
5
+
6
+ # Associations
7
+ belongs_to :owner, class_name: "User"
8
+ belongs_to :done_deal_user, class_name: "User", optional: true
9
+ belongs_to :registration, optional: true
10
+ belongs_to :device, optional: true
11
+
12
+ # Validations
13
+ validates :name, presence: true, length: {maximum: 512}
14
+ validates :account_type, length: {maximum: 256}
15
+
16
+ validates :email, length: {maximum: 256}
17
+ validate_email :email
18
+ validates :address, length: {maximum: 512}
19
+
20
+ validates :contact_number_1, presence: true, length: {maximum: 24}
21
+ validates :contact_number_2, length: {maximum: 24}
22
+ validates :contact_number_3, length: {maximum: 24}
23
+ validates :contact_number_4, length: {maximum: 24}
24
+
25
+ # ------------------
26
+ # Class Methods
27
+ # ------------------
28
+
29
+ # return an active record relation object with the search query in its where clause
30
+ # Return the ActiveRecord::Relation object
31
+ # == Examples
32
+ # >>> Contact.search(query)
33
+ # => ActiveRecord::Relation object
34
+ scope :search, lambda {|query| where("LOWER(contacts.name) LIKE LOWER('%#{query}%') OR
35
+ LOWER(contacts.contact_number_1) LIKE LOWER('%#{query}%') OR
36
+ LOWER(contacts.contact_number_2) LIKE LOWER('%#{query}%') OR
37
+ LOWER(contacts.contact_number_3) LIKE LOWER('%#{query}%') OR
38
+ LOWER(contacts.contact_number_4) LIKE LOWER('%#{query}%') OR
39
+ LOWER(contacts.email) LIKE LOWER('%#{query}%') OR
40
+ LOWER(contacts.account_type) LIKE LOWER('%#{query}%')")}
41
+
42
+ # ------------------
43
+ # Instance Methods
44
+ # ------------------
45
+
46
+ # Permission Methods
47
+ # ------------------
48
+
49
+ def can_be_edited?
50
+ false
51
+ end
52
+
53
+ def can_be_deleted?
54
+ false
55
+ end
56
+
57
+ # Authentication Methods
58
+ # ----------------------
59
+
60
+ # Other Methods
61
+ # -------------
62
+
63
+ # * Return full name
64
+ # == Examples
65
+ # >>> contact.display_name
66
+ # => "<NAME>"
67
+ def display_name
68
+ "#{self.name}"
69
+ end
70
+
71
+ def get_done_deal_user
72
+ arr = [self.contact_number_1, self.contact_number_2, self.contact_number_3, self.contact_number_4].compact.uniq
73
+ return if arr.first.nil?
74
+ reg = Registration.where("CONCAT_WS('', dialing_prefix, mobile_number) IN (?)", arr).first
75
+ return reg && reg.user ? reg.user : nil
76
+ end
77
+
78
+ end
@@ -0,0 +1,12 @@
1
+ class ContactSerializer < ActiveModel::Serializer
2
+ include NullAttributeReplacer
3
+ attributes :id, :name, :account_type, :email, :address, :contact_number_1, :contact_number_2, :contact_number_3, :contact_number_4
4
+
5
+ has_one :profile_picture, class_name: "Image::ProfilePicture", serializer: ProfilePictureSerializer do
6
+ if object.done_deal_user && object.done_deal_user.profile_picture
7
+ object.done_deal_user.profile_picture
8
+ else
9
+ Image::ProfilePicture.new
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,34 @@
1
+ <%
2
+
3
+ api_title = "Negative Case - 1 - should set proper errors if api token is not present"
4
+
5
+ api_input = <<-eos
6
+ Example:
7
+
8
+ Authorization: nil
9
+ GET #{request.base_url}/api/v1/contacts
10
+ {
11
+ }
12
+
13
+ Contact API fetch the synced data from the data base
14
+ eos
15
+
16
+ api_output = <<-eos
17
+ {
18
+ "success": false,
19
+ "errors": {
20
+ "heading": "Invalid API Token",
21
+ "message": "Use the API Token you have received after accepting the terms and agreement"
22
+ }
23
+ }
24
+ eos
25
+
26
+ %>
27
+
28
+ <%= render partial: "kuppayam/api/docs/example", locals: {
29
+ negative_case: true,
30
+ example_id: "neg_case_1",
31
+ api_title: api_title,
32
+ api_input: api_input,
33
+ api_output: api_output
34
+ } %>
@@ -0,0 +1,67 @@
1
+ <%
2
+
3
+ api_title = "Positive Case - 1 - API fetch all contacts corresponding to the logged user from the Data Base"
4
+
5
+ api_input = <<-eos
6
+ Example:
7
+
8
+ Authorization: Token token="103652edd6bbdc72b770d3c8cb88b18d"
9
+ GET #{request.base_url}/api/v1/contacts
10
+
11
+
12
+ Contact API fetch all synced contacts from the data base
13
+ eos
14
+
15
+ api_output = <<-eos
16
+ {
17
+ "success": true,
18
+ "data": [
19
+ {
20
+ "id": 1,
21
+ "name": "Mohanlal",
22
+ "account_type": "com.mollywood",
23
+ "email": "mohanlal@gmail.com",
24
+ "address": "",
25
+ "contact_number_1": "87393993884",
26
+ "contact_number_2": "9846557465",
27
+ "contact_number_3": "",
28
+ "contact_number_4": "",
29
+ "profile_picture": {
30
+ "id": "",
31
+ "created_at": "",
32
+ "profile_id": "",
33
+ "image_large_path": "",
34
+ "image_small_path": ""
35
+ }
36
+ },
37
+ {
38
+ "id": 2,
39
+ "name": "Mammukka",
40
+ "account_type": "com.mollywood1",
41
+ "email": "mammukka@gmail.com",
42
+ "address": "",
43
+ "contact_number_1": "808650052",
44
+ "contact_number_2": "7488374657",
45
+ "contact_number_3": "",
46
+ "contact_number_4": "",
47
+ "profile_picture": {
48
+ "id": "",
49
+ "created_at": "",
50
+ "profile_id": "",
51
+ "image_large_path": "",
52
+ "image_small_path": ""
53
+ }
54
+ }
55
+ ]
56
+ }
57
+ eos
58
+
59
+ %>
60
+
61
+ <%= render partial: "kuppayam/api/docs/example", locals: {
62
+ negative_case: false,
63
+ example_id: "pos_case_1",
64
+ api_title: api_title,
65
+ api_input: api_input,
66
+ api_output: api_output
67
+ } %>
@@ -0,0 +1,52 @@
1
+ <%
2
+
3
+ api_title = "Negative Case - 1 - should set proper errors if api token is not present"
4
+
5
+ api_input = <<-eos
6
+ Example:
7
+
8
+ Authorization: nil
9
+ POST #{request.base_url}/api/v1/contacts/sync
10
+ {
11
+ "contacts": [
12
+ {
13
+ "name": "sanoop",
14
+ "account_type": "com.mollywood",
15
+ "email": "san@gmail.com",
16
+ "address": "xyz, str, efg",
17
+ "contact_number_1": "87393993884",
18
+ "contact_number_2":"9846557465"
19
+ },
20
+ {
21
+ "name": "arjun",
22
+ "account_type": "com.mollywood1",
23
+ "email": "arj@gmail.com",
24
+ "address": "xyz, str, efg",
25
+ "contact_number_1": "77777777",
26
+ "contact_number_2":"999999999"
27
+ }
28
+ ]
29
+ }
30
+
31
+ Contact sync API sync the mobile contact with donedeal backend
32
+ eos
33
+
34
+ api_output = <<-eos
35
+ {
36
+ "success": false,
37
+ "errors": {
38
+ "heading": "Invalid API Token",
39
+ "message": "Use the API Token you have received after accepting the terms and agreement"
40
+ }
41
+ }
42
+ eos
43
+
44
+ %>
45
+
46
+ <%= render partial: "kuppayam/api/docs/example", locals: {
47
+ negative_case: true,
48
+ example_id: "neg_case_1",
49
+ api_title: api_title,
50
+ api_input: api_input,
51
+ api_output: api_output
52
+ } %>
@@ -0,0 +1,53 @@
1
+ <%
2
+
3
+ api_title = "Positive Case - 1 - Sync phone contact with donedeal backend"
4
+
5
+ api_input = <<-eos
6
+ Example:
7
+
8
+ Authorization: Token token="103652edd6bbdc72b770d3c8cb88b18d"
9
+ POST #{request.base_url}/api/v1/contacts/sync
10
+ {
11
+ "contacts": [
12
+ {
13
+ "name": "sanoop",
14
+ "account_type": "com.mollywood",
15
+ "email": "san@gmail.com",
16
+ "address": "xyz, str, efg",
17
+ "contact_number_1": "87393993884",
18
+ "contact_number_2":"9846557465"
19
+ },
20
+ {
21
+ "name": "arjun",
22
+ "account_type": "com.mollywood1",
23
+ "email": "arj@gmail.com",
24
+ "address": "xyz, str, efg",
25
+ "contact_number_1": "77777777",
26
+ "contact_number_2":"999999999"
27
+ }
28
+ ]
29
+ }
30
+
31
+ Contact sync API sync the mobile contact with donedeal backend
32
+ eos
33
+
34
+ api_output = <<-eos
35
+ {
36
+ "success": true,
37
+ "alert": {
38
+ "heading": "The Contacts has been synced successfully",
39
+ "message": "You may now store the done deal user id of these contacts returned in this response"
40
+ },
41
+ "data": []
42
+ }
43
+ eos
44
+
45
+ %>
46
+
47
+ <%= render partial: "kuppayam/api/docs/example", locals: {
48
+ negative_case: false,
49
+ example_id: "pos_case_1",
50
+ api_title: api_title,
51
+ api_input: api_input,
52
+ api_output: api_output
53
+ } %>
@@ -0,0 +1,33 @@
1
+ <%
2
+
3
+ api_title = "Negative Case - 1 - should set proper errors if api token is not present"
4
+
5
+ api_input = <<-eos
6
+ Example:
7
+
8
+ Authorization: nil
9
+ GET #{request.base_url}/api/v1/contacts/1
10
+
11
+
12
+ Single contact API fetch single contact from back end
13
+ eos
14
+
15
+ api_output = <<-eos
16
+ {
17
+ "success": false,
18
+ "errors": {
19
+ "heading": "Invalid API Token",
20
+ "message": "Use the API Token you have received after accepting the terms and agreement"
21
+ }
22
+ }
23
+ eos
24
+
25
+ %>
26
+
27
+ <%= render partial: "kuppayam/api/docs/example", locals: {
28
+ negative_case: true,
29
+ example_id: "neg_case_1",
30
+ api_title: api_title,
31
+ api_input: api_input,
32
+ api_output: api_output
33
+ } %>
@@ -0,0 +1,47 @@
1
+ <%
2
+
3
+ api_title = "Positive Case - 1 - Sync phone contact with donedeal backend"
4
+
5
+ api_input = <<-eos
6
+ Example:
7
+
8
+ Authorization: nil
9
+ GET #{request.base_url}/api/v1/contacts/1
10
+
11
+
12
+ Single contact API fetch single contact from back end
13
+ eos
14
+
15
+ api_output = <<-eos
16
+ {
17
+ "success": true,
18
+ "data": {
19
+ "id": 1,
20
+ "name": "Mohanlal",
21
+ "account_type": "com.mollywood",
22
+ "email": "mohanlal@gmail.com",
23
+ "address": "",
24
+ "contact_number_1": "87393993884",
25
+ "contact_number_2": "9846557465",
26
+ "contact_number_3": "",
27
+ "contact_number_4": "",
28
+ "profile_picture": {
29
+ "id": "",
30
+ "created_at": "",
31
+ "profile_id": "",
32
+ "image_large_path": "",
33
+ "image_small_path": ""
34
+ }
35
+ }
36
+ }
37
+ eos
38
+
39
+ %>
40
+
41
+ <%= render partial: "kuppayam/api/docs/example", locals: {
42
+ negative_case: false,
43
+ example_id: "pos_case_1",
44
+ api_title: api_title,
45
+ api_input: api_input,
46
+ api_output: api_output
47
+ } %>
@@ -108,4 +108,8 @@ en:
108
108
  message: "You may use Profile Picture Upload API to add one again"
109
109
  profile_picture_does_not_exists:
110
110
  heading: "Profile Picture doesn't exists"
111
- message: "You are trying to destroy a profile picture when it doesn't exist"
111
+ message: "You are trying to destroy a profile picture when it doesn't exist"
112
+ contacts:
113
+ synced_successfully:
114
+ heading: "The Contacts has been synced successfully"
115
+ message: "You may now store the done deal user id of these contacts returned in this response"
data/config/routes.rb CHANGED
@@ -60,6 +60,11 @@ Usman::Engine.routes.draw do
60
60
  put :update_profile, :controller => "profile", as: :update_profile
61
61
  get :profile_info, :controller => "profile", as: :profile_info
62
62
 
63
+ # Contacts
64
+ post 'contacts/sync', :controller => "contacts", action: :sync, as: :sync_contacts
65
+ get 'contacts', :controller => "contacts", action: :index, as: :contacts
66
+ get 'contacts/:id', :controller => "contacts", action: :show, as: :contact
67
+
63
68
  # Profile Picture
64
69
  post 'profile/profile_picture_base64', :controller => "profile_picture", action: :profile_picture_base64, as: :profile_picture_base64
65
70
  post 'profile/profile_picture', :controller => "profile_picture", action: :profile_picture, as: :profile_picture
@@ -79,6 +84,10 @@ Usman::Engine.routes.draw do
79
84
  get 'update_profile', :controller => "docs"
80
85
  get 'get_profile_info', :controller => "docs"
81
86
 
87
+ get 'contacts_sync', :controller => "docs"
88
+ get 'all_contacts', :controller => "docs"
89
+ get 'single_contacts', :controller => "docs"
90
+
82
91
  get 'upload_profile_picture_base64', :controller => "docs"
83
92
  get 'upload_profile_picture', :controller => "docs"
84
93
  get 'delete_profile_picture', :controller => "docs"
@@ -0,0 +1,24 @@
1
+ class CreateContacts < ActiveRecord::Migration[5.1]
2
+ def change
3
+ create_table :contacts do |t|
4
+
5
+ t.string :name, limit: 512
6
+
7
+ t.string :account_type, null: true, limit: 256
8
+
9
+ t.string :email, :null => true, limit: 256
10
+ t.string :address, :null => true, limit: 512
11
+
12
+ t.references :owner, references: :user
13
+ t.references :done_deal_user, references: :user
14
+ t.references :registration
15
+ t.references :device
16
+
17
+ t.string :contact_number_1, :null => false, :limit=>24
18
+ t.string :contact_number_2, :null => true, :limit=>24
19
+ t.string :contact_number_3, :null => true, :limit=>24
20
+ t.string :contact_number_4, :null => true, :limit=>24
21
+
22
+ end
23
+ end
24
+ end
data/lib/usman/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Usman
2
- VERSION = '0.3.23'
2
+ VERSION = '0.3.24'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: usman
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.23
4
+ version: 0.3.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - kpvarma
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-17 00:00:00.000000000 Z
11
+ date: 2017-11-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -107,7 +107,7 @@ dependencies:
107
107
  version: '0.1'
108
108
  - - ">="
109
109
  - !ruby/object:Gem::Version
110
- version: 0.1.23
110
+ version: 0.1.26
111
111
  type: :runtime
112
112
  prerelease: false
113
113
  version_requirements: !ruby/object:Gem::Requirement
@@ -117,7 +117,7 @@ dependencies:
117
117
  version: '0.1'
118
118
  - - ">="
119
119
  - !ruby/object:Gem::Version
120
- version: 0.1.23
120
+ version: 0.1.26
121
121
  - !ruby/object:Gem::Dependency
122
122
  name: pattana
123
123
  requirement: !ruby/object:Gem::Requirement
@@ -127,7 +127,7 @@ dependencies:
127
127
  version: '0.1'
128
128
  - - ">="
129
129
  - !ruby/object:Gem::Version
130
- version: 0.1.18
130
+ version: 0.1.20
131
131
  type: :runtime
132
132
  prerelease: false
133
133
  version_requirements: !ruby/object:Gem::Requirement
@@ -137,7 +137,7 @@ dependencies:
137
137
  version: '0.1'
138
138
  - - ">="
139
139
  - !ruby/object:Gem::Version
140
- version: 0.1.18
140
+ version: 0.1.20
141
141
  - !ruby/object:Gem::Dependency
142
142
  name: bcrypt
143
143
  requirement: !ruby/object:Gem::Requirement
@@ -421,6 +421,7 @@ files:
421
421
  - app/assets/sketches/logo.sketch
422
422
  - app/controllers/usman/admin_controller.rb
423
423
  - app/controllers/usman/api/v1/base_controller.rb
424
+ - app/controllers/usman/api/v1/contacts_controller.rb
424
425
  - app/controllers/usman/api/v1/docs_controller.rb
425
426
  - app/controllers/usman/api/v1/profile_controller.rb
426
427
  - app/controllers/usman/api/v1/profile_picture_controller.rb
@@ -451,6 +452,8 @@ files:
451
452
  - app/models/role.rb
452
453
  - app/models/user.rb
453
454
  - app/models/usman/application_record.rb
455
+ - app/models/usman/contact.rb
456
+ - app/serializers/contact_serializer.rb
454
457
  - app/serializers/owner_serializer.rb
455
458
  - app/serializers/profile_picture_serializer.rb
456
459
  - app/serializers/profile_serializer.rb
@@ -469,6 +472,10 @@ files:
469
472
  - app/views/usman/api/v1/docs/accept_tac/_neg_case_2.html.erb
470
473
  - app/views/usman/api/v1/docs/accept_tac/_neg_case_3.html.erb
471
474
  - app/views/usman/api/v1/docs/accept_tac/_pos_case_1.html.erb
475
+ - app/views/usman/api/v1/docs/all_contacts/_neg_case_1.html.erb
476
+ - app/views/usman/api/v1/docs/all_contacts/_pos_case_1.html.erb
477
+ - app/views/usman/api/v1/docs/contacts_sync/_neg_case_1.html.erb
478
+ - app/views/usman/api/v1/docs/contacts_sync/_pos_case_1.html.erb
472
479
  - app/views/usman/api/v1/docs/create_profile/_neg_case_1.html.erb
473
480
  - app/views/usman/api/v1/docs/create_profile/_neg_case_2.html.erb
474
481
  - app/views/usman/api/v1/docs/create_profile/_neg_case_3.html.erb
@@ -493,6 +500,8 @@ files:
493
500
  - app/views/usman/api/v1/docs/resend_otp/_neg_case_3.html.erb
494
501
  - app/views/usman/api/v1/docs/resend_otp/_neg_case_4.html.erb
495
502
  - app/views/usman/api/v1/docs/resend_otp/_pos_case_1.html.erb
503
+ - app/views/usman/api/v1/docs/single_contacts/_neg_case_1.html.erb
504
+ - app/views/usman/api/v1/docs/single_contacts/_pos_case_1.html.erb
496
505
  - app/views/usman/api/v1/docs/update_profile/_neg_case_1.html.erb
497
506
  - app/views/usman/api/v1/docs/update_profile/_neg_case_2.html.erb
498
507
  - app/views/usman/api/v1/docs/update_profile/_neg_case_3.html.erb
@@ -577,6 +586,7 @@ files:
577
586
  - db/migrate/20170929083234_add_categorisable_to_features.rb
578
587
  - db/migrate/20170929083235_change_disabled_to_removed_features.rb
579
588
  - db/migrate/20170929083236_add_country_city_to_users.rb
589
+ - db/migrate/20171124071245_create_contacts.rb
580
590
  - lib/tasks/usman/data.rake
581
591
  - lib/tasks/usman/master_data.rake
582
592
  - lib/temp/features.rake