text: // attributes for reviews
  
  'use strict';
  
  module.exports = {
  	teamId: {
  		type: 'id',
  		required: true,
  		description: 'ID of the @@#team#team@@ that owns this code review'
  	},
  	streamId: {
  		type: 'string',
  		default: '',
  		maxLength: 150,
  		description: 'The @@#stream#stream@@ this code review belongs to'
  	},
  	postId: {
  		type: 'string',
  		default: '',
  		maxLength: 150,
  		description: 'The @@#post#post@@ that points to this code review'
  	},
  	fileStreamIds: {
  		type: 'arrayOfIds',
  		maxLength: 500,
  		description: 'The IDs of all the @@#file streams#stream@@ with contributions to this code review'
  	},
  	codemarkIds: {
  		type: 'arrayOfIds',
  		maxLength: 100,
  		description: 'The IDs of any @@#codemarks#codemark@@ associated with this code review'
  	},
  	markerIds: {
  		type: 'arrayOfIds',
  		maxLength: 1000,
  		description: 'The IDs of any @@#markers#marker@@ associated with this code review'
  	},
  	title: {
  		type: 'string',
  		maxLength: 1000,
  		description: 'Title of the code review'
  	},
  	reviewers: {
  		type: 'arrayOfStrings',
  		maxLength: 200,
  		description: 'Array of user IDs to whom this code review is assigned'
  	},
  	text: {
  		type: 'string',
  		maxLength: 10000,
  		description: 'The text/description of this code review'
  	},
  	origin: {
  		type: 'string',
  		maxLength: 20,
  		description: 'Origin of the review, usually the IDE'
  	},
  	originDetail: {
  		type: 'string',
  		maxLength: 40,
  		description: 'Origin detail of the review, usually the IDE'
  	},
  	status: {
  		type: 'string',
  		maxLength: 20,
  		description: 'Status of this code review'
  	},
  	followerIds: {
  		type: 'arrayOfIds',
  		maxLength: 1000,
  		description: 'Array of user IDs representing followers of this code review; followers receive notifications when the review is created and when there are replies'
  	},
  	numReplies: {
  		type: 'number',
  		default: 0,
  		description: 'The number of replies to this code review'
  	},
  	lastReplyAt: {
  		type: 'timestamp',
  		description: 'Timestamp of the last reply to this codemark, if any'
  	},
  	lastActivityAt: {
  		type: 'timestamp',
  		description: 'If the review has codemarks or replies, same as lastReplyAt, otherwise same as createdAt'
  	},
  	tags: {
  		type: 'arrayOfStrings',
  		maxLength: 50,
  		description: 'The IDs of any tags associated with this codemark'
  	},
  	reviewChangesets: {
  		type: 'arrayOfObjects',
  		maxLength: 100,
  		maxObjectLength: 10000,
  		description: 'Array of changesets associated with this review, one per repo'
  	},
  	reviewDiffs: {
  		type: 'object',
  		maxObjectLength: 10000000,
  		description: 'Keys are repo IDs, values are the diff sets corresponding to the changesets that were passed in when the review was created'
  	},
  	checkpointReviewDiffs: {
  		type: 'arrayOfObjects',
  		maxLength: 100,
  		maxObjectLength: 10000000,
  		description: 'Array of diff sets corresponding to the diffs characterized in reviewChangesets'
  	},
  	authorsById: {
  		type: 'object',
  		maxLength: 1000,
  		description: 'Hash where user IDs are keys, indicating the authors of code referenced by this code review'
  	},
  	permalink: {
  		type: 'string',
  		maxLength: 1000,
  		description: 'Private permalink URL for this review'
  	},
  	approvedAt: {
  		type: 'timestamp',
  		description: 'When this review was approved'
  	},
  	allReviewersMustApprove: {
  		type: 'boolean',
  		description: 'All reviews must approve this review for it to be approved, otherwise any of the reviewers can'
  	},
  	approvedBy: {
  		type: 'object',
  		maxLength: 10000,
  		description: 'Hash representing people who have approved the review, keys are the user IDs, and values are objects containing additional information: for now just approvedAt, the timestamp of the approval'
  	},
  	pullRequestUrl: {
  		type: 'string',
  		maxLength: 1000,
  		description: 'URL for the pull request associated with this review'
  	},
  	pullRequestProviderId: {
  		type: 'string',
  		maxLength: '50',
  		description: 'Identifies the third-party provider hosting the pull request associated with this review'
  	},
  	pullRequestTitle: {
  		type: 'string',
  		maxLength: 250,
  		description: 'Title of the pull request associated with this review'
  	},
  	ticketUrl: {
  		type: 'string',
  		maxLength: 1000,
  		description: 'URL for the third-party ticket or issue associated with this review'
  	},
  	ticketProviderId: {
  		type: 'string',
  		maxLength: 50,
  		description: 'Identifies the third-party provider hosting the ticket or issue associated with this review'
  	},
  	lastReminderSentAt: {
  		type: 'timestamp',
  		description: 'Indicates the last time a reminder email was sent for this review',
  		serverOnly: true
  	},
  	codeAuthorIds: {
  		type: 'arrayOfIds',
  		maxLength: 1000,
  		description: 'Array of user IDs representing authors of the code referenced by this code review'
  	},
  	entryPoint: {
  		type: 'string',
  		maxLength: 100,
  		description: 'Entry point used to create this review'
  	}
  };
  