aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Backend/Api/Api/Controllers/PostController.cs7
-rw-r--r--Backend/Api/Api/Interfaces/IPostService.cs2
-rw-r--r--Backend/Api/Api/Models/Post.cs6
-rw-r--r--Backend/Api/Api/Services/PostService.cs35
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt77
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt2
-rw-r--r--Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/RatingData.kt11
7 files changed, 112 insertions, 28 deletions
diff --git a/Backend/Api/Api/Controllers/PostController.cs b/Backend/Api/Api/Controllers/PostController.cs
index 3d7199c..88c1c99 100644
--- a/Backend/Api/Api/Controllers/PostController.cs
+++ b/Backend/Api/Api/Controllers/PostController.cs
@@ -92,14 +92,15 @@ namespace Api.Controllers
public async Task<ActionResult> addRating([FromBody] RatingReceive rating,string id)
{
var userid = await _userService.UserIdFromJwt();
- if (await _postService.AddOrReplaceRating(rating, userid))
- return Ok();
+ var rez = await _postService.AddOrReplaceRating(rating, userid);
+ if(rez != null)
+ return Ok(rez);
return BadRequest();
}
[HttpDelete("posts/{id}/removerating")]
[Authorize(Roles = "User")]
- public async Task<ActionResult> removeRating(string id)
+ public async Task<ActionResult<int>> removeRating(string id)
{
var userid = await _userService.UserIdFromJwt();
if (await _postService.RemoveRating(id,userid))
diff --git a/Backend/Api/Api/Interfaces/IPostService.cs b/Backend/Api/Api/Interfaces/IPostService.cs
index 60781bb..a9adb05 100644
--- a/Backend/Api/Api/Interfaces/IPostService.cs
+++ b/Backend/Api/Api/Interfaces/IPostService.cs
@@ -9,7 +9,7 @@ namespace Api.Interfaces
Task<List<PostSend>> getAllPosts();
Task<PostSend> getPostById(string id,string userid);
Task<PostSend> postToPostSend(Post post);
- Task<Boolean> AddOrReplaceRating(RatingReceive rating, string userid);
+ Task<RatingSend> AddOrReplaceRating(RatingReceive rating, string userid);
Task<Boolean> RemoveRating(string postid, string userid);
Task<CommentSend> AddComment(CommentReceive cmnt, string userid, string postid);
Task<List<CommentSend>> ListComments(string postid);
diff --git a/Backend/Api/Api/Models/Post.cs b/Backend/Api/Api/Models/Post.cs
index 0dc8158..78b4705 100644
--- a/Backend/Api/Api/Models/Post.cs
+++ b/Backend/Api/Api/Models/Post.cs
@@ -49,6 +49,12 @@ namespace Api.Models
public string userId { get; set; }
public int rating { get; set; }
}
+ public class RatingSend
+ {
+ public int ratingscount { get; set; }
+ public double ratings { get; set; }
+ public int myrating { get; set; }
+ }
public class Comment
{
[BsonId]
diff --git a/Backend/Api/Api/Services/PostService.cs b/Backend/Api/Api/Services/PostService.cs
index dcfd5e0..c57cfec 100644
--- a/Backend/Api/Api/Services/PostService.cs
+++ b/Backend/Api/Api/Services/PostService.cs
@@ -148,13 +148,34 @@ namespace Api.Services
return await postToPostSend(p);
}
- public async Task<Boolean> AddOrReplaceRating(RatingReceive rating,string userid)
+ public async Task<RatingSend> AddOrReplaceRating(RatingReceive rating,string userid) //0 return existing flag , -1 rating failed flag
{
Post p = await _posts.Find(post => post._id == rating.postId).FirstOrDefaultAsync();
if (p != null)
{
+ var tosend = new RatingSend();
+ var ps = await postToPostSend(p);
+ tosend.ratings = ps.ratings;
+ tosend.ratingscount = ps.ratingscount;
+
if (p.ownerId == userid)
- return false;
+ return null;
+ if(rating.rating == 0)// ako nema rating staviti 0
+ {
+ var r = p.ratings.Find(x => x.userId == userid);
+ if(r != null)
+ {
+ tosend.myrating=r.rating;
+ return tosend;
+ }
+ else
+ {
+ tosend.myrating = 0;
+ return tosend;
+ }
+ }
+ if(rating.rating<1 || rating.rating>5)
+ return null;
if(!p.ratings.Any(x => x.userId == userid))
{
Rating r = new Rating();
@@ -162,6 +183,7 @@ namespace Api.Services
r.userId = userid;
p.ratings.Add(r);
await _posts.ReplaceOneAsync(x => x._id == p._id, p);
+ tosend.myrating=rating.rating;
}
else
{
@@ -170,10 +192,15 @@ namespace Api.Services
r.rating = rating.rating;
p.ratings.Add(r);
await _posts.ReplaceOneAsync(x => x._id == p._id, p);
+ tosend.myrating = rating.rating;
}
- return true;
+ p = await _posts.Find(post => post._id == rating.postId).FirstOrDefaultAsync();
+ ps = await postToPostSend(p);
+ tosend.ratings = ps.ratings;
+ tosend.ratingscount = ps.ratingscount;
+ return tosend;
}
- return false;
+ return null;
}
public async Task<Boolean> RemoveRating(string postid, string userid)
{
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt
index d1ec76b..e1c2f80 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Activities/ActivitySinglePost.kt
@@ -3,9 +3,12 @@ package com.example.brzodolokacije.Activities
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
+import android.media.Image
import android.os.Bundle
import android.preference.PreferenceManager
+import android.provider.ContactsContract.CommonDataKinds.Im
import android.util.Log
+import android.widget.ImageButton
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
@@ -66,6 +69,9 @@ class ActivitySinglePost : AppCompatActivity() {
setRatingListeners()
translateOwnerIdToName(post.ownerId)
+ val alreadyrated= RatingReceive(starNumber.toInt(),post._id)
+ requestAddRating(alreadyrated)
+
binding.tvUser.setOnClickListener {
val intent: Intent = Intent(this@ActivitySinglePost,ActivityUserProfile::class.java)
var b= Bundle()
@@ -115,13 +121,29 @@ class ActivitySinglePost : AppCompatActivity() {
recyclerViewComments!!.adapter= adapterComments
}
- fun setRatingListeners(){
- val emptyStar=R.drawable.empty_star
- val fullStar=R.drawable.full_star
- //var starlist:List<ImageButton> = mutableListOf()
+ fun setRatingListeners() {
+ val emptyStar = R.drawable.empty_star
+ val fullStar = R.drawable.full_star
+ /*var starlist: ArrayList<ImageButton> = arrayListOf()
+ starlist.add(findViewById(R.id.rateStar1) as ImageButton)
+ starlist.add(findViewById(R.id.rateStar2) as ImageButton)
+ starlist.add(findViewById(R.id.rateStar3) as ImageButton)
+ starlist.add(findViewById(R.id.rateStar4) as ImageButton)
+ starlist.add(findViewById(R.id.rateStar5) as ImageButton)
+ for (i in 0..4) {
+ starlist[i].setOnClickListener {
+ for (j in 1..i) {
+ starlist[j].setImageResource(fullStar)
+ }
+ for (k in i..5) {
+ starlist[k].setImageResource(emptyStar)
+ }
+ starNumber = i+1;
+ }
+ }*/
binding.rateStar1.setOnClickListener {
- Toast.makeText(this,"kliknuta prva zvezdica",Toast.LENGTH_SHORT).show()
+ //Toast.makeText(this,"kliknuta prva zvezdica",Toast.LENGTH_SHORT).show()
binding.rateStar1.setImageResource(fullStar)
binding.rateStar2.setImageResource(emptyStar)
binding.rateStar3.setImageResource(emptyStar)
@@ -130,7 +152,7 @@ class ActivitySinglePost : AppCompatActivity() {
starNumber=1
}
binding.rateStar2.setOnClickListener {
- Toast.makeText(this,"kliknuta druga zvezdica",Toast.LENGTH_SHORT).show()
+ //Toast.makeText(this,"kliknuta druga zvezdica",Toast.LENGTH_SHORT).show()
binding.rateStar1.setImageResource(fullStar)
binding.rateStar2.setImageResource(fullStar)
binding.rateStar3.setImageResource(emptyStar)
@@ -139,7 +161,7 @@ class ActivitySinglePost : AppCompatActivity() {
starNumber=2
}
binding.rateStar3.setOnClickListener {
- Toast.makeText(this,"kliknuta treca zvezdica",Toast.LENGTH_SHORT).show()
+ //Toast.makeText(this,"kliknuta treca zvezdica",Toast.LENGTH_SHORT).show()
binding.rateStar1.setImageResource(fullStar)
binding.rateStar2.setImageResource(fullStar)
binding.rateStar3.setImageResource(fullStar)
@@ -148,7 +170,7 @@ class ActivitySinglePost : AppCompatActivity() {
starNumber=3
}
binding.rateStar4.setOnClickListener {
- Toast.makeText(this,"kliknuta cetvrta zvezdica",Toast.LENGTH_SHORT).show()
+ //Toast.makeText(this,"kliknuta cetvrta zvezdica",Toast.LENGTH_SHORT).show()
binding.rateStar1.setImageResource(fullStar)
binding.rateStar2.setImageResource(fullStar)
binding.rateStar3.setImageResource(fullStar)
@@ -157,7 +179,7 @@ class ActivitySinglePost : AppCompatActivity() {
starNumber=4
}
binding.rateStar5.setOnClickListener {
- Toast.makeText(this,"kliknuta peta zvezdica",Toast.LENGTH_SHORT).show()
+ //Toast.makeText(this,"kliknuta peta zvezdica",Toast.LENGTH_SHORT).show()
binding.rateStar1.setImageResource(fullStar)
binding.rateStar2.setImageResource(fullStar)
binding.rateStar3.setImageResource(fullStar)
@@ -194,6 +216,7 @@ class ActivitySinglePost : AppCompatActivity() {
request.enqueue(object : retrofit2.Callback<CommentSend?> {
override fun onResponse(call: Call<CommentSend?>, response: Response<CommentSend?>) {
if(response.isSuccessful){
+
var newComment=response.body()!!
requestGetComments(newComment)
binding.NewComment.text.clear()
@@ -251,15 +274,31 @@ class ActivitySinglePost : AppCompatActivity() {
val postApi= RetrofitHelper.getInstance()
val token= SharedPreferencesHelper.getValue("jwt", this@ActivitySinglePost)
val request=postApi.addRating("Bearer "+token,post._id,rating)
- request.enqueue(object : retrofit2.Callback<ResponseBody?> {
- override fun onResponse(call: Call<ResponseBody?>, response: Response<ResponseBody?>) {
+ request.enqueue(object : retrofit2.Callback<RatingData?> {
+ override fun onResponse(call: Call<RatingData?>, response: Response<RatingData?>) {
if(response.isSuccessful){
- //zasad hardkodovano, zameniti te vrednosti sa brojem ocena kada se doda
- post.ratings=((post.ratings)*10+rating.rating)/11
- binding.tvRating.text=String.format("%.2f",post.ratings)
- Toast.makeText(
- this@ActivitySinglePost, "prosao zahtev", Toast.LENGTH_LONG
- ).show()
+ var data=response.body()!!
+ binding.tvRating.text=String.format("%.2f",data.ratings)
+ binding.tvNumberOfRatings.text=String.format("%d",data.ratingscount)
+ Log.d("--------------",data.ratings.toString()+" "+data.ratingscount.toString())
+ when(data.myrating){
+ 1->binding.rateStar1.performClick()
+ 2->binding.rateStar2.performClick()
+ 3->binding.rateStar3.performClick()
+ 4->binding.rateStar4.performClick()
+ 5->binding.rateStar5.performClick()
+ else->{
+ val emptyStar = R.drawable.empty_star
+ binding.rateStar1.setImageResource(emptyStar)
+ binding.rateStar2.setImageResource(emptyStar)
+ binding.rateStar3.setImageResource(emptyStar)
+ binding.rateStar4.setImageResource(emptyStar)
+ binding.rateStar5.setImageResource(emptyStar)
+ }
+ }
+ /*Toast.makeText(
+ this@ActivitySinglePost, "prosao zahtev", Toast.LENGTH_LONG
+ ).show()*/
}else{
if(response.errorBody()!=null)
Log.d("main1",response.errorBody().toString())
@@ -268,7 +307,7 @@ class ActivitySinglePost : AppCompatActivity() {
}
- override fun onFailure(call: Call<ResponseBody?>, t: Throwable) {
+ override fun onFailure(call: Call<RatingData?>, t: Throwable) {
Log.d("main2",t.message.toString())
}
})
@@ -284,7 +323,7 @@ class ActivitySinglePost : AppCompatActivity() {
tvLocationParent.invalidate()
tvRating.text=post.ratings.toString()
tvRating.invalidate()
- tvNumberOfRatings.text=post.ratings.toString()
+ tvNumberOfRatings.text=post.ratingscount.toString()
tvNumberOfRatings.invalidate()
tvDescription.text=post.description
tvDescription.invalidate()
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt
index ce8d7e3..dedd0bf 100644
--- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Interfaces/IBackendApi.kt
@@ -38,7 +38,7 @@ interface IBackendApi {
,@Part("tags") tags:RequestBody
):Call<PostPreview>
@POST("api/Post/posts/{id}/addrating")
- fun addRating(@Header("Authorization") authHeader:String,@Path("id") id:String,@Body rating: RatingReceive):Call<ResponseBody>
+ fun addRating(@Header("Authorization") authHeader:String,@Path("id") id:String,@Body rating: RatingReceive):Call<RatingData>
@POST("api/Post/posts/{id}/addcomment")
fun addComment(@Header("Authorization") authHeader:String,@Path("id") id:String,@Body rating: CommentReceive):Call<CommentSend>
@GET("api/Post/posts/{id}/listcomments")
diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/RatingData.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/RatingData.kt
new file mode 100644
index 0000000..630c325
--- /dev/null
+++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Models/RatingData.kt
@@ -0,0 +1,11 @@
+package com.example.brzodolokacije.Models
+
+import android.os.Parcelable
+import kotlinx.android.parcel.Parcelize
+
+@Parcelize
+data class RatingData(
+ var ratings:Double,
+ var ratingscount:Int,
+ var myrating:Int
+):Parcelable \ No newline at end of file