Ivankooo1

Koce - Press House

Oct 20th, 2020 (edited)
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve() {
  2. class Article {
  3. constructor(title, content) {
  4. this.title = title;
  5. this.content = content;
  6. }
  7.  
  8. toString() {
  9. return `Title: ${this.title}\nContent: ${this.content}`;
  10. }
  11. }
  12.  
  13. class ShortReports extends Article {
  14. constructor(title, content, originalResearch) {
  15. if (content.length >= 150) {
  16. throw new Error('Short reports content should be less then 150 symbols.');
  17. }
  18.  
  19. if (!originalResearch.hasOwnProperty('title') || !originalResearch.hasOwnProperty('author')) {
  20. throw new Error('The original research should have author and title.');
  21. }
  22. super(title,content);
  23. this.comments = [];
  24. this.originalResearch = originalResearch;
  25. }
  26.  
  27. addComment(comment) {
  28. this.comments.push(comment);
  29. return 'The comment is added.';
  30. }
  31.  
  32. toString() {
  33. let output = super.toString();
  34. output += `\nOriginal Research: ${this.originalResearch.title} by ${this.originalResearch.author}`;
  35.  
  36. if (this.comments.length > 0) {
  37. output += '\nComments:\n'
  38. output += this.comments.join('\n');
  39. }
  40.  
  41. return output;
  42. }
  43. }
  44.  
  45. class BookReview extends Article {
  46. constructor(title, content, book) {
  47. super(title,content);
  48. this.book = book;
  49. this.clients = [];
  50. }
  51.  
  52. addClient(clientName, orderDescription) {
  53. let hasClient = this.clients.find(client => client.name === clientName
  54. && client.description === orderDescription);
  55.  
  56. if (hasClient) {
  57. throw new Error('This client has already ordered this review.');
  58. }
  59.  
  60. this.clients.push({name:clientName,description:orderDescription});
  61. return `${clientName} has ordered a review for ${orderDescription}`;
  62. }
  63.  
  64. toString() {
  65. let output = super.toString() +'\n';
  66. output += `Book: ${this.book.name}`;
  67. if (this.clients.length > 0) {
  68. output += '\nOrders:\n';
  69. output += this.clients.map(client => `${client.name} - ${client.description}`).join('\n');
  70. }
  71.  
  72. return output;
  73. }
  74. }
  75.  
  76. return {Article, ShortReports, BookReview};
  77. }
  78.  
  79. let classes = solve();
  80. let book = new classes.BookReview("The Great Gatsby is so much more than a love story", "The Great Gatsby is in many ways similar to Romeo and Juliet, yet I believe that it is so much more than just a love story. It is also a reflection on the hollowness of a life of leisure. ...", { name: "The Great Gatsby", author: "F Scott Fitzgerald" });
  81. console.log(book.addClient("The Guardian", "100 symbols"));
  82. console.log(book.addClient("Goodreads", "30 symbols"));
  83. console.log(book.toString());
  84.  
Add Comment
Please, Sign In to add comment