diff options
author | Jelena Petrovic <jelenapetrovic.7119@gmail.com> | 2022-12-09 01:49:05 +0100 |
---|---|---|
committer | Jelena Petrovic <jelenapetrovic.7119@gmail.com> | 2022-12-09 01:49:05 +0100 |
commit | 156b36fe78bbf017f8d435cbe774a955c4e89b0d (patch) | |
tree | 41856ec3debdf678fc63af8789bc4fd66ac7382c | |
parent | d149eb04958dd1f2ecd123c9ce765ec06c7505e5 (diff) | |
parent | 1210e044c11ea7d41717398ab4a91c151c15992c (diff) |
Merge branch 'develop' of http://gitlab.pmf.kg.ac.rs/BrzoDoLokacije2022/odyssey/brzodolokacije into develop
8 files changed, 207 insertions, 17 deletions
diff --git a/Backend/Api/Api/Controllers/AuthController.cs b/Backend/Api/Api/Controllers/AuthController.cs index abb7adc..b63665b 100644 --- a/Backend/Api/Api/Controllers/AuthController.cs +++ b/Backend/Api/Api/Controllers/AuthController.cs @@ -120,5 +120,15 @@ namespace Api.Controllers return base.Content(html, "text/html"); } } + [HttpGet("jwttoid")] + [Authorize(Roles = "User")] + public async Task<ActionResult<string>> JwtToUserId() + { + var userid = await _userService.UserIdFromJwt(); + if (userid != null) + return Ok(userid); + return BadRequest(); + } + } } diff --git a/Backend/Api/Api/Controllers/PostController.cs b/Backend/Api/Api/Controllers/PostController.cs index 61a4f48..33c240c 100644 --- a/Backend/Api/Api/Controllers/PostController.cs +++ b/Backend/Api/Api/Controllers/PostController.cs @@ -56,7 +56,7 @@ namespace Api.Controllers } return BadRequest(); } - [HttpGet("posts/delete/{id}")] + [HttpDelete("posts/delete/{id}")] [Authorize(Roles = "User")] public async Task<ActionResult<string>> deletePost(string id) { diff --git a/Backend/Api/Api/Services/PostService.cs b/Backend/Api/Api/Services/PostService.cs index 16ebbb7..07e225e 100644 --- a/Backend/Api/Api/Services/PostService.cs +++ b/Backend/Api/Api/Services/PostService.cs @@ -115,7 +115,7 @@ namespace Api.Services foreach (var image in p.images) System.IO.File.Delete(image.path); - await _posts.DeleteOneAsync(postid); + await _posts.FindOneAndDeleteAsync(x => x._id==postid); return true; } 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 74b5f4c..2aff051 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 @@ -51,8 +51,11 @@ class ActivitySinglePost : AppCompatActivity() { private var recyclerViewComments: RecyclerView?=null private var favouriteImage: ImageView?=null private lateinit var tagLayout: LinearLayout + private lateinit var createdAt:TextView public lateinit var post: PostPreview + public lateinit var ratings:TextView + public lateinit var ratingscount:TextView private var comments:MutableList<CommentSend>?=mutableListOf() private var starNumber:Number=0 @@ -140,7 +143,6 @@ class ActivitySinglePost : AppCompatActivity() { recyclerViewImages?.setHasFixedSize(true) recyclerViewImages?.layoutManager = layoutManagerImages recyclerViewImages?.adapter = adapterImages - } btnChangeHeightDown.setOnClickListener { btnChangeHeightDown.isVisible=false @@ -206,7 +208,10 @@ class ActivitySinglePost : AppCompatActivity() { } } - + public fun updateratings(rc:Int,r:Double){ + binding.tvRating.text=r.toString() + binding.tvNumberOfRatings.text=rc.toString() + } fun loadFavourite(){ @@ -282,7 +287,8 @@ class ActivitySinglePost : AppCompatActivity() { tvNumberOfRatings.invalidate() //tvRating.text=String.format("%.2f",data.ratings) //tvNumberOfRatings.text=String.format("%d",data.ratingscount) - + tvDatePosted.text=post.createdAt.toLocaleString() + tvDatePosted.invalidate() } diff --git a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentSinglePostDescription.kt b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentSinglePostDescription.kt index 1f17a11..6e37052 100644 --- a/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentSinglePostDescription.kt +++ b/Client/BrzoDoLokacije/app/src/main/java/com/example/brzodolokacije/Fragments/FragmentSinglePostDescription.kt @@ -1,21 +1,24 @@ package com.example.brzodolokacije.Fragments +import android.content.Intent import android.os.Bundle import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.ImageButton +import android.widget.Button import android.widget.ImageView import android.widget.TextView -import android.widget.Toast +import androidx.core.view.isGone +import androidx.core.view.isVisible import androidx.fragment.app.Fragment +import com.example.brzodolokacije.Activities.ActivitySinglePost +import com.example.brzodolokacije.Activities.NavigationActivity import com.example.brzodolokacije.Models.* import com.example.brzodolokacije.R import com.example.brzodolokacije.Services.RetrofitHelper import com.example.brzodolokacije.Services.SharedPreferencesHelper import com.google.gson.Gson -import org.w3c.dom.Text import retrofit2.Call import retrofit2.Response @@ -30,6 +33,13 @@ class FragmentSinglePostDescription : Fragment() { private lateinit var star5:ImageView private var starNumber:Number=0 private lateinit var post:PostPreview + private lateinit var parentact:ActivitySinglePost + private lateinit var ocenitext:TextView + private lateinit var userid:String + private lateinit var del:TextView + private lateinit var delbtn:Button + private lateinit var delbtnY:Button + private lateinit var delbtnN:Button override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -37,7 +47,7 @@ class FragmentSinglePostDescription : Fragment() { ): View? { var view=inflater.inflate(R.layout.fragment_single_post_description, container, false) - + parentact = activity as ActivitySinglePost //uzmi post prosledjen iz single post @@ -45,10 +55,18 @@ class FragmentSinglePostDescription : Fragment() { var jsonPostObject = args!!.getString("post") post= Gson().fromJson(jsonPostObject, PostPreview::class.java) + //setuj opis descriptionContainer=view.findViewById(R.id.tvDescription) descriptionContainer.text=post.description.toString() + + del=view.findViewById(R.id.tvObrisi) + delbtn=view.findViewById(R.id.btnObrisi) + delbtnY=view.findViewById(R.id.btnObrisiY) + delbtnN=view.findViewById(R.id.btnObrisiN) + userid="" + ocenitext=view.findViewById(R.id.title) //setuj zvezdice star1=view.findViewById(R.id.rateStar1) star2=view.findViewById(R.id.rateStar2) @@ -57,15 +75,17 @@ class FragmentSinglePostDescription : Fragment() { star5=view.findViewById(R.id.rateStar5) setRatingListeners() + val alreadyrated= RatingReceive(starNumber.toInt(),post._id) requestAddRating(alreadyrated) - + toggleStarRatings() return view } fun setRatingListeners() { val emptyStar = R.drawable.ic_round_star_outline_24 val fullStar = R.drawable.ic_baseline_star_rate_24 + val offStar = R.drawable.ic_baseline_star_24 star1.setOnClickListener { //Toast.makeText(this,"kliknuta prva zvezdica",Toast.LENGTH_SHORT).show() @@ -140,9 +160,11 @@ class FragmentSinglePostDescription : Fragment() { "--------------", data.ratings.toString() + " " + data.ratingscount.toString() ) + parentact.updateratings(data.ratingscount,data.ratings) if(rating.rating==0) { val emptyStar = R.drawable.empty_star val fullStar = R.drawable.ic_baseline_star_rate_24 + when (data.myrating) { 1 -> { star1.setImageResource(fullStar) @@ -204,4 +226,97 @@ class FragmentSinglePostDescription : Fragment() { } }) } + fun toggleStarRatings(){ + var token= SharedPreferencesHelper.getValue("jwt", requireActivity()).toString() + val api= RetrofitHelper.getInstance() + val request= api.getUserId("Bearer " + token) + request.enqueue(object : retrofit2.Callback<String> { + override fun onResponse(call: Call<String>, + response: Response<String> + ) { + if (response.body() == null) { + return + } + userid=response.body().toString() + Log.d("UID TEST",userid) + if(post.ownerId==userid){ + //val offStar = R.drawable.ic_baseline_star_24 + ocenitext.text="Vlasnik posta ne moze ocenjivati sebe" + /*star1.setImageResource(offStar) + star2.setImageResource(offStar) + star3.setImageResource(offStar) + star4.setImageResource(offStar) + star5.setImageResource(offStar)*/ + star1.isEnabled=false + star2.isEnabled=false + star3.isEnabled=false + star4.isEnabled=false + star5.isEnabled=false + + ocenitext.isVisible=false + ocenitext.isGone=true + star1.isVisible=false + star1.isGone=true + star2.isVisible=false + star2.isGone=true + star3.isVisible=false + star3.isGone=true + star4.isVisible=false + star4.isGone=true + star5.isVisible=false + star5.isGone=true + + delbtn.isGone=false + delbtn.setOnClickListener{ + del.isGone=false + delbtnY.isGone=false + delbtnN.isGone=false + delbtn.isGone=true + delbtnY.setOnClickListener { + deletePostreq() + } + delbtnN.setOnClickListener { + del.isGone=true + delbtnY.isGone=true + delbtnN.isGone=true + delbtn.isGone=false + } + } + + + } + } + + override fun onFailure(call: Call<String>, t: Throwable) { + + } + }) + + + } + + fun deletePostreq(){ + var token= SharedPreferencesHelper.getValue("jwt", requireActivity()).toString() + val api= RetrofitHelper.getInstance() + val request= api.DeletePost("Bearer " + token,post._id) + request.enqueue(object : retrofit2.Callback<String> { + override fun onResponse( + call: Call<String>, + response: Response<String> + ) { + if(response.isSuccessful){ + SharedPreferencesHelper.addValue("jwt",token,activity!!) + val intent= Intent(activity!!, NavigationActivity::class.java) + startActivity(intent) + activity!!.finish() + } + + } + + override fun onFailure(call: Call<String>, t: Throwable) { + + } + }) + } + }
\ No newline at end of file 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 f6dfdcf..66a78d3 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 @@ -126,5 +126,8 @@ interface IBackendApi { fun changePass(@Header("Authorization") authHeader:String):Call<Int> @GET("/api/user/{username}/profile/stats") fun getUserStatsFromUsername(@Header("Authorization") authHeader:String,@Path("username") username:String):Call<Statistics> - + @GET("/api/auth/jwttoid") + fun getUserId(@Header("Authorization") authHeader:String):Call<String> + @DELETE("api/Post/posts/delete/{id}") + fun DeletePost(@Header("Authorization") authHeader:String,@Path("id") id:String):Call<String> }
\ No newline at end of file diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml index 15e81cf..0f8c527 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/activity_single_post.xml @@ -89,11 +89,23 @@ android:gravity="top|start" android:padding="@dimen/text_padding" android:text="User" - android:textSize="17dp" + android:textSize="20dp" android:textStyle="bold" + android:textColor="#FF03DAC5" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/tvLocationType" /> + <TextView + android:id="@+id/tvDatePosted" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="16dp" + android:gravity="top|start" + android:padding="@dimen/text_padding" + android:text="Timestamp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tvLocationType" /> + <LinearLayout android:id="@+id/llTags" android:layout_width="match_parent" diff --git a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_single_post_description.xml b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_single_post_description.xml index 5bbdb14..f4dcb9d 100644 --- a/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_single_post_description.xml +++ b/Client/BrzoDoLokacije/app/src/main/res/layout/fragment_single_post_description.xml @@ -39,6 +39,8 @@ app:layout_constraintTop_toBottomOf="@+id/tvDescription" /> <LinearLayout + + android:id="@+id/linearLayout9" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" @@ -47,47 +49,89 @@ app:layout_constraintTop_toBottomOf="@+id/title"> <ImageView - android:clickable="true" android:id="@+id/rateStar1" android:layout_width="50dp" android:layout_height="50dp" + android:clickable="true" android:scaleType="centerCrop" android:src="@drawable/ic_round_star_outline_24" /> <ImageView - android:clickable="true" android:id="@+id/rateStar2" android:layout_width="50dp" android:layout_height="50dp" + android:clickable="true" android:scaleType="centerCrop" android:src="@drawable/ic_round_star_outline_24" /> <ImageView - android:clickable="true" android:id="@+id/rateStar3" android:layout_width="50dp" android:layout_height="50dp" + android:clickable="true" android:scaleType="centerCrop" android:src="@drawable/ic_round_star_outline_24" /> <ImageView - android:clickable="true" android:id="@+id/rateStar4" android:layout_width="50dp" android:layout_height="50dp" + android:clickable="true" android:scaleType="centerCrop" android:src="@drawable/ic_round_star_outline_24" /> <ImageView - android:clickable="true" android:id="@+id/rateStar5" android:layout_width="50dp" android:layout_height="50dp" + android:clickable="true" android:scaleType="centerCrop" android:src="@drawable/ic_round_star_outline_24" /> </LinearLayout> + + <TextView + android:id="@+id/tvObrisi" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Sigurno? Brisanje je trajno." + android:visibility="gone" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/btnObrisi" /> + + <Button + android:id="@+id/btnObrisi" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="19dp" + android:text="Obrisi objavu" + android:visibility="gone" + android:backgroundTint="#8B0000" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/linearLayout9" /> + + <Button + android:id="@+id/btnObrisiN" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:backgroundTint="#FFFFFF" + android:textColor="@color/cardview_dark_background" + android:layout_marginStart="20dp" + android:text="Odustani" + android:visibility="gone" + app:layout_constraintStart_toEndOf="@+id/btnObrisiY" + app:layout_constraintTop_toBottomOf="@+id/tvObrisi" /> + + <Button + android:id="@+id/btnObrisiY" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="Potvrdi" + android:visibility="gone" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tvObrisi" /> + <!--<LinearLayout android:id="@+id/linearLayout2" android:layout_width="match_parent" |