Bläddra i källkod

added News entity (dao, bo, etc.)

markus 1 vecka sedan
förälder
incheckning
133d17cbab

+ 10 - 4
src-php/app/internship/bo/News.php

@@ -38,14 +38,14 @@ use n2n\persistence\orm\attribute\ManyToMany;
 		'text' => 'news_text'
 ])] */
 /*	#[MappedSuperclass] */
-/*	#[OneToMany('assignement.assignementGroup', Member::class)]*/
-/* #[ManyToOne(targetEntity: BlogArticle::class, cascade: null, cascadeType: CascadeType::ALL, fetch: FetchType::EAGER)] */
 /*	#[EntityListeners(LastModListener::class)] */
 /*	#[OneToOne(Article::class)] */
 /*	#[ManyToMany('articles', Article::class)] */
+/*	#[OneToMany('assignement.assignementGroup', Member::class)]*/
+/*  #[ManyToOne(targetEntity: BlogArticle::class, cascade: null, cascadeType: CascadeType::ALL, fetch: FetchType::EAGER)] */
 class News extends ObjectAdapter implements \JsonSerializable {
 	public int $id;
-	/* #[OrderBy]
+	/*  #[OrderBy(array('name' => 'ASC'))]
 		#[Embedded(Address::class)]
 		#[AttributeOverrides(['forename' => 'bill_forename',
 		'surname' => 'bill_surname'])]
@@ -54,9 +54,15 @@ class News extends ObjectAdapter implements \JsonSerializable {
 	/* #[ManagedFile(FileManager::TYPE_PUBLIC)] */
 	/* #[AssociationOverrides(array( 'assignementGroup' => new JoinColumn('group_id')))] */
 	/* #[JoinColumn('article_id')] */
+	public string $title;
+
+	public string $description;
+
 	public string $text;
 
 	public function jsonSerialize(): mixed {
-		// TODO: Implement jsonSerialize() method.
+		return ['title' => $this->title,
+				'description' => $this->description,
+				'text' => $this->text ];
 	}
 }

+ 61 - 0
src-php/app/internship/controller/NewsApiController.php

@@ -0,0 +1,61 @@
+<?php
+
+namespace internship\controller;
+
+use n2n\web\http\controller\ControllerAdapter;
+use n2n\context\attribute\Inject;
+use internship\model\CommentDao;
+use n2n\web\http\PageNotFoundException;
+use n2n\web\http\StatusException;
+use n2n\web\http\controller\ParamBody;
+use n2n\web\http\BadRequestException;
+use internship\bo\Article;
+use internship\bo\News;
+use internship\model\NewsDao;
+
+class NewsApiController extends ControllerAdapter {
+	#[Inject]
+	private NewsDao $newsDao;
+
+	function getDoNews(): void {
+		$this->sendJson($this->newsDao->getNews());
+	}
+
+	function getDoNewsList(int $newsId): void {
+		$comment = $this->newsDao->getNewsById($newsId);
+		if($comment === null) {
+			throw new PageNotFoundException();
+		} else {
+			$this->sendJson($comment);
+		}
+	}
+
+	/**
+	 * Speichere eine News.
+	 *
+	 * @return void
+	 * @throws StatusException
+	*/
+	function postDoNews(ParamBody $body): void {
+		$httpData = $body->parseJsonToHttpData();
+		$title = $httpData->reqString('title');
+		$description = $httpData->reqString('description');
+		$text = $httpData->reqString('text');
+
+		$newsToAdd = $this->createNews($title, $description, $text);
+
+		$this->beginTransaction();
+		$this->newsDao->saveNews($newsToAdd);
+		$this->commit();
+
+		$this->sendJson($newsToAdd);
+	}
+
+	function createNews($title, $description, $text): News {
+		$news = new News();
+		$news->title = $title;
+		$news->description = $description;
+		$news->text = $text;
+		return $news;
+	}
+}

+ 35 - 0
src-php/app/internship/model/NewsDao.php

@@ -0,0 +1,35 @@
+<?php
+
+namespace internship\model;
+
+use n2n\persistence\orm\EntityManager;
+use n2n\context\attribute\RequestScoped;
+use internship\bo\Comment;
+use n2n\context\attribute\Inject;
+use internship\bo\News;
+use internship\bo\Article;
+
+#[RequestScoped]
+class NewsDao {
+	#[Inject]
+	private EntityManager $em;
+
+	/**
+	 * Gebe alle {@see Comment}-Objekte, nach id absteigend sortiert, zurück.
+	 *
+	 * @return Comment[]
+	 */
+	function getNews(): array {
+		$criteria = $this->em->createSimpleCriteria(News::getClass(), array(), array('id' => 'DESC'));
+		return $criteria->toQuery()->fetchArray();
+	}
+
+	function getNewsById(int $id): ?News {
+		return $this->em->find(News::getClass(), $id);
+	}
+
+	function saveNews(News $newArticle): void {
+		$this->em->persist($newArticle);
+	}
+
+}

+ 3 - 1
src-php/var/etc/internship/app.ini

@@ -3,8 +3,10 @@ controllers[/] = "internship\controller\IsRootController"
 controllers[/user] = "internship\\controller\\UserApiController"
 controllers[/api/category] = "internship\\controller\\CategoryApiController"
 controllers[/api/comment] = "internship\\controller\\CommentApiController"
+controllers[/api/news] = "internship\\controller\\NewsApiController"
 
 [orm]
 entities[] = "internship\bo\Article"
 entities[] = "internship\bo\Category"
-entities[] = "internship\bo\Comment"
+entities[] = "internship\bo\Comment"
+entities[] = "internship\bo\News"