| POST | /report/search |
|---|
import Foundation
import ServiceStack
public class ReportSearch : PagingRequest
{
public var columns:[String] = []
public var title:String
public var typeId:Int?
public var groupId:Int?
public var subjectId:Int?
public var isUrgent:Bool?
public var documentSearchStage:DocumentSearchStage
public var isInternal:Bool?
public var fromDate:Date?
public var toDate:Date?
public var statusId:Int?
public var issuingAgencyId:Int?
public var orderBy:SearchOrderBy
public var isParty:Bool?
required public init(){ super.init() }
private enum CodingKeys : String, CodingKey {
case columns
case title
case typeId
case groupId
case subjectId
case isUrgent
case documentSearchStage
case isInternal
case fromDate
case toDate
case statusId
case issuingAgencyId
case orderBy
case isParty
}
required public init(from decoder: Decoder) throws {
try super.init(from: decoder)
let container = try decoder.container(keyedBy: CodingKeys.self)
columns = try container.decodeIfPresent([String].self, forKey: .columns) ?? []
title = try container.decodeIfPresent(String.self, forKey: .title)
typeId = try container.decodeIfPresent(Int.self, forKey: .typeId)
groupId = try container.decodeIfPresent(Int.self, forKey: .groupId)
subjectId = try container.decodeIfPresent(Int.self, forKey: .subjectId)
isUrgent = try container.decodeIfPresent(Bool.self, forKey: .isUrgent)
documentSearchStage = try container.decodeIfPresent(DocumentSearchStage.self, forKey: .documentSearchStage)
isInternal = try container.decodeIfPresent(Bool.self, forKey: .isInternal)
fromDate = try container.decodeIfPresent(Date.self, forKey: .fromDate)
toDate = try container.decodeIfPresent(Date.self, forKey: .toDate)
statusId = try container.decodeIfPresent(Int.self, forKey: .statusId)
issuingAgencyId = try container.decodeIfPresent(Int.self, forKey: .issuingAgencyId)
orderBy = try container.decodeIfPresent(SearchOrderBy.self, forKey: .orderBy)
isParty = try container.decodeIfPresent(Bool.self, forKey: .isParty)
}
public override func encode(to encoder: Encoder) throws {
try super.encode(to: encoder)
var container = encoder.container(keyedBy: CodingKeys.self)
if columns.count > 0 { try container.encode(columns, forKey: .columns) }
if title != nil { try container.encode(title, forKey: .title) }
if typeId != nil { try container.encode(typeId, forKey: .typeId) }
if groupId != nil { try container.encode(groupId, forKey: .groupId) }
if subjectId != nil { try container.encode(subjectId, forKey: .subjectId) }
if isUrgent != nil { try container.encode(isUrgent, forKey: .isUrgent) }
if documentSearchStage != nil { try container.encode(documentSearchStage, forKey: .documentSearchStage) }
if isInternal != nil { try container.encode(isInternal, forKey: .isInternal) }
if fromDate != nil { try container.encode(fromDate, forKey: .fromDate) }
if toDate != nil { try container.encode(toDate, forKey: .toDate) }
if statusId != nil { try container.encode(statusId, forKey: .statusId) }
if issuingAgencyId != nil { try container.encode(issuingAgencyId, forKey: .issuingAgencyId) }
if orderBy != nil { try container.encode(orderBy, forKey: .orderBy) }
if isParty != nil { try container.encode(isParty, forKey: .isParty) }
}
}
public class PagingRequest : Codable
{
public var page:Int
public var limit:Int
required public init(){}
}
public enum DocumentSearchStage : String, Codable
{
case All
case AllProcessing
case Draft
case PendingApproval
case IsRevisionRequested
case PendingCompilation
case PendingReport
case Published
case Active
case InActive
}
public enum SearchOrderBy : String, Codable
{
case UpdatedDateDesc
case PublishDateDesc
}
public class SearchResponse : IResponseRequest, Codable
{
public var totalCount:Int
public var code:Int
public var data:[DocumentSearchResultItem] = []
public var message:String
required public init(){}
}
public class DocumentSearchResultItem : Codable
{
public var title:String
public var Description:String
public var owner:String
public var documentPolicyId:Int?
public var updateDocumentId:Int?
public var effectBeginDate:Date?
public var effectEndDate:Date?
public var issuingAgencyId:Int?
public var subjectId:Int?
public var signBy:String
public var signDate:Date?
public var updatedAt:Date?
public var statusId:Int?
public var isInternal:Bool
public var documentNumber:String
public var documentCode:String
public var isUrgent:Bool?
public var id:Int
public var reasonReturn:String
public var accountId:Int?
public var approverId:Int?
// @StringLength(500)
public var updatedBy:String
// @StringLength(500)
public var createdBy:String
public var isParty:Bool?
public var isRevisionRequested:Bool?
public var isPrivate:Bool?
public var departmentId:Int?
public var publicationDate:Date?
public var processStatusId:Int
public var documentTypeId:Int?
public var documentGroupId:Int?
public var accountName:String
public var acceptAccountName:String
public var documentGroupText:String
public var processStatusText:String
public var documentTypeText:String
public var departmentText:String
public var statusText:String
public var issuingAgencyText:String
public var subjectText:String
public var comment:String
public var submitComment:String
public var fullFile:String
public var parthFile:String
public var isActive:Bool?
public var stepOrder:Int?
public var stepCount:Int?
required public init(){}
}
To override the Content-type in your clients, use the HTTP Accept Header, append the .jsv suffix or ?format=jsv
The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.
POST /report/search HTTP/1.1
Host: etc-api.vsmlab.vn
Accept: text/jsv
Content-Type: text/jsv
Content-Length: length
{
columns:
[
String
],
title: String,
typeId: 0,
groupId: 0,
subjectId: 0,
isUrgent: False,
documentSearchStage: All,
isInternal: False,
fromDate: "0001-01-01T00:00:00.0000000+07:06",
toDate: "0001-01-01T00:00:00.0000000+07:06",
statusId: 0,
issuingAgencyId: 0,
orderBy: UpdatedDateDesc,
isParty: False,
page: 1,
limit: 10
}
HTTP/1.1 200 OK
Content-Type: text/jsv
Content-Length: length
{
totalCount: 0,
code: 0,
data:
[
{
title: String,
description: String,
owner: String,
documentPolicyId: 0,
updateDocumentId: 0,
effectBeginDate: "0001-01-01T00:00:00.0000000+07:06",
effectEndDate: "0001-01-01T00:00:00.0000000+07:06",
issuingAgencyId: 0,
subjectId: 0,
signBy: String,
signDate: "0001-01-01T00:00:00.0000000+07:06",
updatedAt: "0001-01-01T00:00:00.0000000+07:06",
statusId: 0,
isInternal: False,
documentNumber: String,
documentCode: String,
isUrgent: False,
id: 0,
reasonReturn: String,
accountId: 0,
approverId: 0,
updatedBy: String,
createdBy: String,
isParty: False,
isRevisionRequested: False,
isPrivate: False,
departmentId: 0,
publicationDate: "0001-01-01T00:00:00.0000000+07:06",
processStatusId: 0,
documentTypeId: 0,
documentGroupId: 0,
accountName: String,
acceptAccountName: String,
documentGroupText: String,
processStatusText: String,
documentTypeText: String,
departmentText: String,
statusText: String,
issuingAgencyText: String,
subjectText: String,
comment: String,
submitComment: String,
fullFile: String,
parthFile: String,
isActive: False,
stepOrder: 0,
stepCount: 0
}
],
message: String
}