tvpl.api

<back to all web services

DocumentSearchRequest

Requires Authentication
The following routes are available for this service:
POST/document/search
import Foundation
import ServiceStack

public class DocumentSearchRequest : PagingRequest, IDocumentSearchFilter, IPost
{
    public var title:String
    public var typeId:Int?
    public var groupId:Int?
    public var subjectId:Int?
    public var issuingAgencyId:Int?
    public var isUrgent:Bool?
    public var documentSearchStage:DocumentSearchStage
    public var isInternal:Bool?
    public var statusId:Int?
    public var orderBy:SearchOrderBy
    public var fromDate:Date?
    public var toDate:Date?
    public var isParty:Bool?
    public var branchType:Int16?
    public var scopeType:Int
    public var isFullTextSearch:Bool?
    public var createdByMe:Bool?
    public var mainId:Int?

    required public init(){ super.init() }

    private enum CodingKeys : String, CodingKey {
        case title
        case typeId
        case groupId
        case subjectId
        case issuingAgencyId
        case isUrgent
        case documentSearchStage
        case isInternal
        case statusId
        case orderBy
        case fromDate
        case toDate
        case isParty
        case branchType
        case scopeType
        case isFullTextSearch
        case createdByMe
        case mainId
    }

    required public init(from decoder: Decoder) throws {
        try super.init(from: decoder)
        let container = try decoder.container(keyedBy: CodingKeys.self)
        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)
        issuingAgencyId = try container.decodeIfPresent(Int.self, forKey: .issuingAgencyId)
        isUrgent = try container.decodeIfPresent(Bool.self, forKey: .isUrgent)
        documentSearchStage = try container.decodeIfPresent(DocumentSearchStage.self, forKey: .documentSearchStage)
        isInternal = try container.decodeIfPresent(Bool.self, forKey: .isInternal)
        statusId = try container.decodeIfPresent(Int.self, forKey: .statusId)
        orderBy = try container.decodeIfPresent(SearchOrderBy.self, forKey: .orderBy)
        fromDate = try container.decodeIfPresent(Date.self, forKey: .fromDate)
        toDate = try container.decodeIfPresent(Date.self, forKey: .toDate)
        isParty = try container.decodeIfPresent(Bool.self, forKey: .isParty)
        branchType = try container.decodeIfPresent(Int16.self, forKey: .branchType)
        scopeType = try container.decodeIfPresent(Int.self, forKey: .scopeType)
        isFullTextSearch = try container.decodeIfPresent(Bool.self, forKey: .isFullTextSearch)
        createdByMe = try container.decodeIfPresent(Bool.self, forKey: .createdByMe)
        mainId = try container.decodeIfPresent(Int.self, forKey: .mainId)
    }

    public override func encode(to encoder: Encoder) throws {
        try super.encode(to: encoder)
        var container = encoder.container(keyedBy: CodingKeys.self)
        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 issuingAgencyId != nil { try container.encode(issuingAgencyId, forKey: .issuingAgencyId) }
        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 statusId != nil { try container.encode(statusId, forKey: .statusId) }
        if orderBy != nil { try container.encode(orderBy, forKey: .orderBy) }
        if fromDate != nil { try container.encode(fromDate, forKey: .fromDate) }
        if toDate != nil { try container.encode(toDate, forKey: .toDate) }
        if isParty != nil { try container.encode(isParty, forKey: .isParty) }
        if branchType != nil { try container.encode(branchType, forKey: .branchType) }
        if scopeType != nil { try container.encode(scopeType, forKey: .scopeType) }
        if isFullTextSearch != nil { try container.encode(isFullTextSearch, forKey: .isFullTextSearch) }
        if createdByMe != nil { try container.encode(createdByMe, forKey: .createdByMe) }
        if mainId != nil { try container.encode(mainId, forKey: .mainId) }
    }
}

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
    case TitleAsc
    case DocumentCodeAsc
}

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 signBy:String
    public var signDate:Date?
    public var updatedAt:Date?
    public var statusId:Int?
    public var statusKey:String
    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 branchType:Int16
    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 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?
    public var completedStepCount:Int?

    required public init(){}
}


Swift DocumentSearchRequest DTOs

To override the Content-type in your clients, use the HTTP Accept Header, append the .other suffix or ?format=other

HTTP + OTHER

The following are sample HTTP requests and responses. The placeholders shown need to be replaced with actual values.

POST /document/search HTTP/1.1 
Host: qlcn-api.vsmlab.vn 
Accept: text/jsonl
Content-Type: text/jsonl
Content-Length: length

{"title":"String","typeId":0,"groupId":0,"subjectId":0,"issuingAgencyId":0,"isUrgent":false,"documentSearchStage":"All","isInternal":false,"statusId":0,"orderBy":"UpdatedDateDesc","fromDate":"0001-01-01T00:00:00.0000000+07:06","toDate":"0001-01-01T00:00:00.0000000+07:06","isParty":false,"branchType":0,"scopeType":0,"isFullTextSearch":false,"createdByMe":false,"mainId":0,"page":1,"limit":10}
HTTP/1.1 200 OK
Content-Type: text/jsonl
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,"signBy":"String","signDate":"0001-01-01T00:00:00.0000000+07:06","updatedAt":"0001-01-01T00:00:00.0000000+07:06","statusId":0,"statusKey":"String","isInternal":false,"documentNumber":"String","documentCode":"String","isUrgent":false,"id":0,"reasonReturn":"String","accountId":0,"approverId":0,"updatedBy":"String","createdBy":"String","isParty":false,"branchType":0,"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","comment":"String","submitComment":"String","fullFile":"String","parthFile":"String","isActive":false,"stepOrder":0,"stepCount":0,"completedStepCount":0}],"message":"String"}