/* eslint-disable
    camelcase,
    handle-callback-err,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
 * decaffeinate suggestions:
 * DS102: Remove unnecessary code created because of implicit returns
 * DS207: Consider shorter variations of null checks
 * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
 */
let ContactManager
const { db, ObjectId } = require('./mongojs')
const logger = require('logger-sharelatex')
const metrics = require('metrics-sharelatex')

module.exports = ContactManager = {
  touchContact(user_id, contact_id, callback) {
    if (callback == null) {
      callback = function(error) {}
    }
    try {
      user_id = ObjectId(user_id.toString())
    } catch (error1) {
      const error = error1
      return callback(error)
    }

    const update = { $set: {}, $inc: {} }
    update.$inc[`contacts.${contact_id}.n`] = 1
    update.$set[`contacts.${contact_id}.ts`] = new Date()

    return db.contacts.update(
      {
        user_id
      },
      update,
      {
        upsert: true
      },
      callback
    )
  },

  getContacts(user_id, callback) {
    if (callback == null) {
      callback = function(error) {}
    }
    try {
      user_id = ObjectId(user_id.toString())
    } catch (error1) {
      const error = error1
      return callback(error)
    }

    return db.contacts.findOne(
      {
        user_id
      },
      function(error, user) {
        if (error != null) {
          return callback(error)
        }
        return callback(null, user != null ? user.contacts : undefined)
      }
    )
  }
}

;['touchContact', 'getContacts'].map(method =>
  metrics.timeAsyncMethod(
    ContactManager,
    method,
    'mongo.ContactManager',
    logger
  )
)

/* eslint-disable
    camelcase,
    handle-callback-err,
*/
// TODO: This file was created by bulk-decaffeinate.
// Fix any style issues and re-enable lint.
/*
 * decaffeinate suggestions:
 * DS102: Remove unnecessary code created because of implicit returns
 * DS207: Consider shorter variations of null checks
 * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
 */
let ContactManager
const { db, ObjectId } = require('./mongojs')
const logger = require('logger-sharelatex')
const metrics = require('metrics-sharelatex')

module.exports = ContactManager = {
  touchContact(user_id, contact_id, callback) {
    if (callback == null) {
      callback = function(error) {}
    }
    try {
      user_id = ObjectId(user_id.toString())
    } catch (error1) {
      const error = error1
      return callback(error)
    }

    const update = { $set: {}, $inc: {} }
    update.$inc[`contacts.${contact_id}.n`] = 1
    update.$set[`contacts.${contact_id}.ts`] = new Date()

    return db.contacts.update(
      {
        user_id
      },
      update,
      {
        upsert: true
      },
      callback
    )
  },

  getContacts(user_id, callback) {
    if (callback == null) {
      callback = function(error) {}
    }
    try {
      user_id = ObjectId(user_id.toString())
    } catch (error1) {
      const error = error1
      return callback(error)
    }

    return db.contacts.findOne(
      {
        user_id
      },
      function(error, user) {
        if (error != null) {
          return callback(error)
        }
        return callback(null, user != null ? user.contacts : undefined)
      }
    )
  }
}
;['touchContact', 'getContacts'].map(method =>
  metrics.timeAsyncMethod(
    ContactManager,
    method,
    'mongo.ContactManager',
    logger
  )
)

Fix formatting