Piac test code coverage report
Current view: top level - src - document.hpp (source / functions) Hit Total Coverage
Commit: Piac-RELEASE Lines: 27 31 87.1 %
Date: 2022-12-16 13:44:03 Functions: 1 4 25.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 31 62 50.0 %

           Branch data     Line data    Source code
       1                 :            : // *****************************************************************************
       2                 :            : /*!
       3                 :            :   \file      src/document.hpp
       4                 :            :   \copyright 2022-2025 J. Bakosi,
       5                 :            :              All rights reserved. See the LICENSE file for details.
       6                 :            :   \brief     Piac document classes to interact with database library
       7                 :            : */
       8                 :            : // *****************************************************************************
       9                 :            : 
      10                 :            : #pragma once
      11                 :            : 
      12                 :            : #include "jsonbase.hpp"
      13                 :            : 
      14                 :            : namespace piac {
      15                 :            : 
      16                 :            : //! Document class to hold a database document and help with JSON serialization
      17 [ +  - ][ +  - ]:         21 : class Document : public JSONBase {
         [ +  - ][ +  - ]
      18                 :            :   public:
      19                 :            :     //! Deserialize document state from JSON object
      20                 :            :     bool deserialize( const rapidjson::Value& obj ) override;
      21                 :            : 
      22                 :          0 :     bool deserialize( const std::string& s ) override {
      23 [ +  - ][ +  - ]:         11 :       return JSONBase::deserialize( s );
         [ +  - ][ +  - ]
      24                 :            :     }
      25                 :            : 
      26                 :            :     bool serialize( rapidjson::Writer<rapidjson::StringBuffer>* writer )
      27                 :            :       const override;
      28                 :            : 
      29                 :         19 :     [[nodiscard]] std::string serialize() const override {
      30         [ +  - ]:         21 :       return JSONBase::serialize();
      31                 :            :     }
      32                 :            : 
      33         [ +  - ]:          9 :     int id() const { return m_id; }
      34                 :         21 :     void id( int i ) { m_id = i; }
      35                 :            : 
      36         [ +  - ]:          9 :     const std::string& title() const { return m_title; }
      37         [ +  - ]:         21 :     void title( const std::string& t ) { m_title = t; }
      38                 :            : 
      39                 :            :     const std::string& author() const { return m_author; }
      40 [ +  - ][ +  - ]:         42 :     void author( const std::string& a ) { m_author = a; }
      41                 :            : 
      42         [ +  - ]:          9 :     const std::string& description() const { return m_description; }
      43         [ +  - ]:         21 :     void description( const std::string& d ) { m_description = d; }
      44                 :            : 
      45         [ +  - ]:          9 :     double price() const { return m_price; }
      46                 :         21 :     void price( double p ) { m_price = p; }
      47                 :            : 
      48         [ +  - ]:          9 :     const std::string& category() const { return m_category; }
      49         [ +  - ]:         21 :     void category( const std::string& t ) { m_category = t; }
      50                 :            : 
      51         [ +  - ]:          9 :     const std::string& condition() const { return m_condition; }
      52         [ +  - ]:         21 :     void condition( const std::string& t ) { m_condition = t; }
      53                 :            : 
      54         [ +  - ]:          9 :     const std::string& shipping() const { return m_shipping; }
      55         [ +  - ]:         21 :     void shipping( const std::string& t ) { m_shipping = t; }
      56                 :            : 
      57         [ +  - ]:          9 :     const std::string& format() const { return m_format; }
      58         [ +  - ]:         21 :     void format( const std::string& t ) { m_format = t; }
      59                 :            : 
      60         [ +  - ]:          9 :     const std::string& location() const { return m_location; }
      61         [ +  - ]:         21 :     void location( const std::string& t ) { m_location = t; }
      62                 :            : 
      63         [ +  - ]:          9 :     const std::string& keywords() const { return m_keywords; }
      64         [ +  - ]:         21 :     void keywords( const std::string& t ) { m_keywords = t; }
      65                 :            : 
      66                 :            :     // SHA is not serialized, but regenerated when needed
      67                 :            :     const std::string& sha() const { return m_sha; }
      68         [ +  - ]:          9 :     void sha( const std::string& s ) { m_sha = s; }
      69                 :            : 
      70                 :            :   private:
      71                 :            :     int m_id;
      72                 :            :     std::string m_title;
      73                 :            :     std::string m_author;
      74                 :            :     std::string m_description;
      75                 :            :     double m_price;
      76                 :            :     std::string m_category;
      77                 :            :     std::string m_condition;
      78                 :            :     std::string m_shipping;
      79                 :            :     std::string m_format;
      80                 :            :     std::string m_location;
      81                 :            :     std::string m_keywords;
      82                 :            :     std::string m_sha;
      83                 :            : };
      84                 :            : 
      85                 :            : //! Multiple document hold a list of database documents
      86         [ +  - ]:         12 : class Documents : public JSONBase {
      87                 :            :   public:
      88                 :            :     bool deserialize( const std::string& s ) override;
      89                 :            : 
      90                 :          0 :     bool deserialize( const rapidjson::Value& ) override { return false; }
      91                 :            : 
      92                 :            :     bool serialize( rapidjson::Writer<rapidjson::StringBuffer>* writer )
      93                 :            :       const override;
      94                 :            : 
      95                 :          0 :     [[nodiscard]] std::string serialize() const override {
      96                 :          0 :       return JSONBase::serialize();
      97                 :            :     }
      98                 :            : 
      99                 :            :     const std::vector< Document >& documents() const { return m_documents; }
     100                 :            :     std::vector< Document >& documents() { return m_documents; }
     101                 :            : 
     102                 :            :     const Document& operator[]( std::size_t i ) const { return m_documents[i]; }
     103                 :            :     Document& operator[]( std::size_t i ) {
     104                 :            :       return const_cast< Document& >(
     105                 :            :                static_cast< const Documents& >( *this ).operator[]( i ) );
     106                 :            :     }
     107                 :            : 
     108                 :            :   private:
     109                 :            :     std::vector< Document > m_documents;
     110                 :            : };
     111                 :            : 
     112                 :            : } // piac::

Generated by: LCOV version 1.14